2

В моем скрипте python я пишу конкретные столбцы из текстового файла в файл new_text_file, разделенный на ,, потому что new_text_file позже станет csv_file. В файле new_text_file остались белые пробелы, потому что строки, которые я пропустил, записывали, что нужно удалить из файла.Как удалить пустые строки в текстовом файле python?

Я не могу использовать .strip() или .rstrip(), потому что получаю ошибку: AttributeError: '_io.TextIOWrapper' object has no attribute 'strip'.

Я не могу использовать ip_file.write("".join(line for line in ip_file if not line.isspace())), потому что получаю ошибку: UnsupportedOperation: not readable.

Я также попытался импортировать sys и re, и попробовал все остальные ответы, найденные на этом сайте, но он по-прежнему возвращает ошибки.

Мой код:

for ip in open("list.txt"): 
    with open(ip.strip()+".txt", "a") as ip_file: 
     for line in open("data.txt"): 
      new_line = line.split(" ") 
      if "blocked" in new_line: 
       if "src="+ip.strip() in new_line: 
        #write columns to new text file 
        ip_file.write(", " + new_line[11]) 
        ip_file.write(", " + new_line[12]) 
        try: 
         ip_file.write(", " + new_line[14] + "\n") 
        except IndexError: 
         pass 

В результате ip_file выглядит следующим образом:

, dst=00.000.00.000, proto=TCP, dpt=80 
, dst=00.000.00.000, proto=TCP, dpt=80 
, dst=00.000.00.000, proto=TCP, dpt=80 

, dst=00.000.00.000, proto=TCP, dpt=80 
, dst=00.000.00.000, proto=TCP, dpt=80 

Я кодирования под последней строкой выше сценария, в петлях. new_text_file - это ip_file в моем скрипте, и все должно быть в Python.

Вопрос: Есть ли другой способ удалить пустые строки в ip_file? ИЛИ предотвратить их когда-либо писать?

+0

Возможный дубликат [Удалить пустые строки] (http://stackoverflow.com/questions/3711856/remove-empty-lines) – enginefree

+0

Когда вы говорите «удалите пустые строки в' ip_file' », вы имеете в виду« избегать написания пустые строки в 'ip_file'? Я не понимаю ваш вопрос. Вы не читаете из 'ip_file' нигде, поэтому я не вижу, как вы могли бы беспокоиться о чтении пустых строк из него, и все ваши вызовы на' ip_file.write' будут как минимум записывать запятую в файл. Так вы можете уточнить, что вы спрашиваете? – Brionius

+0

@Brionius: Я еще немного отредактирую свой вопрос. – hjames

ответ

1

Думаю, я понимаю, о чем вы говорите. Попробуйте сделать эти изменения:

 for line in open("data.txt"): 
      new_line = line.rstrip().split() 
            ^^^^^^^^^ 
      if "blocked" in new_line: 
       if "src="+ip.strip() in new_line: 
        #write columns to new text file 
        ip_file.write(", " + new_line[11]) 
        ip_file.write(", " + new_line[12]) 
        try: 
         ip_file.write(", " + new_line[14]) 
      #              ^^^^ 
        except IndexError: 
         pass 
        ip_file.write("\n") 
      #   

Похоже, что проблема заключалась в том, что, когда new_line[14] существовал, он уже содержит символ новой строки, так что вы были добавлением двух новых строк. Вышеприведенный код выделяет любую строку новой строки, прежде чем разбить ее, а затем добавляет одну новую строку независимо от того, что находится в конце внутреннего цикла.

+0

Хм, это все еще оставляет белые пробелы. Считаете ли вы, что использование '.join()' может работать? – hjames

+0

Итак, попробуйте использовать 'split()' вместо 'split (" ")', как указано выше. – Brionius