2

在我的 python 脚本中,我将 text_file 中的特定列写入 new_text_file 分隔,,因为 new_text_file 稍后将成为 csv_file。new_text_file 中留下了空白行,因为我跳过了需要从文件中删除的行。

我不能使用.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.

我还尝试了导入sysand 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_fileip_file,一切都必须在 Python 中。

问题:还有其他方法可以删除 中的空行ip_file吗?或者阻止它们被写入?

4

1 回答 1

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]它存在时,它已经包含一个换行符,所以你附加了两个换行符。上面的代码在拆分之前将任何换行符脱机,然后在内部 for 循环的末尾添加一个换行符,不管是什么。

于 2013-08-22T15:02:30.027 回答