如何删除TXT文件中的空行?现有代码失效求助
问题描述
我试过各种方法删除其他脚本生成的TXT文件里的空行,包括用.isspace()方法、删除包含若干空格的行、删除含'\n'的行,但都没达到预期效果。下面是TXT文件片段和我的代码,帮忙解决:
TXT文件片段
Gmina Wiejska Urząd Gminy Brzeziny ul. Sienkiewicza 16a 95-060 Brzeziny Łącko Gmina Wiejska Urząd Gminy Łącko Łącko 445 33-390 Łącko Węgliniec Gmina Miejsko-wiejska Urząd Gminy i Miasta Węgliniec ul. Sikorskiego 3 59-940 Węgliniec
我的代码
delete = ['<td align="center" class="top" colspan="3"><b>', '</td>', '<br/></b></td>', '<br/></b>', 'None', 'brak', '[]', '\n' ] with open('/Users/dominikgrzeskowiak/python/gminy/text/text1.txt','r+') as file: for line in file: print(a) for i in delete: line = line.replace(i,'') print(i) print(line) if line != ' ' or line != ' \n' or line != ' ': with open('/Users/dominikgrzeskowiak/python/gminy/text/text2.txt','a') as f: f.write(line+'\n')
解决方案
你的代码存在几个关键问题:
- 条件判断用
or逻辑错误——只要有一个条件不满足就会写入,但空行可能是任意数量空格+换行的组合,根本覆盖不全; - 每次循环都打开输出文件,既低效又容易出问题;
print(a)里的a未定义,会直接报错;- 删除列表里加了
'\n',会把正常行的换行符也删掉,导致内容全部连在一起。
修改后的代码可以一次性解决这些问题:
delete = ['<td align="center" class="top" colspan="3"><b>', '</td>', '<br/></b></td>', '<br/></b>', 'None', 'brak', '[]' ] # 一次性打开输入输出文件,避免重复IO操作 with open('/Users/dominikgrzeskowiak/python/gminy/text/text1.txt','r') as infile, \ open('/Users/dominikgrzeskowiak/python/gminy/text/text2.txt','w') as outfile: for line in infile: # 替换不需要的字符串 for item in delete: line = line.replace(item, '') # 去除每行首尾所有空白(空格、换行、制表符都算) stripped_line = line.strip() # 处理后非空才写入,自动过滤空行 if stripped_line: outfile.write(stripped_line + '\n')
关键说明:
- 删掉了删除列表里的
'\n',保留正常行的换行结构; - 用
strip()方法一次性处理所有首尾空白,不管空行是全空格、纯换行还是混合形式,都能精准过滤; - 输出文件用
w模式直接生成新文件(如果需要追加可以改成a),且只打开一次,效率更高; - 去掉了无意义的
print(a),避免报错。
这样处理后就能得到完全没有空行的干净文本了。
内容的提问来源于stack exchange,提问作者Dominik Grześkowiak
相关产品推荐
相关产品推荐

