如何删除文本文件python中的空行?

时间:2013-08-22 14:46:00

标签: python python-3.x whitespace removing-whitespace blank-line

在我的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

我还尝试导入sysre,并尝试了在此网站上找到的所有其他答案,但仍会返回错误。

我的代码是:

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中的空白行吗?或者阻止它们被写入?

1 个答案:

答案 0 :(得分: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循环结束时附加一个换行符。