我正在寻找一个将删除python中文件中所有空行的衬里。
python等价于 - > grep -v '^$' file_name > file_name
答案 0 :(得分:10)
lines = [i for i in open(file_path) if i[:-1]]
如果要求写入其他文件,可以使用file_object.writelines(lines)
打开文件进行写作。
答案 1 :(得分:4)
以下不是单行,但是工作很容易阅读:
for line in open(filename):
line = line.rstrip()
if line != '':
print line
这会将结果打印到标准输出。修改此代码以在其他地方打印是微不足道的。
如果你坚持认为,将它转换成单行很容易:
''.join(l for l in open(filename) if l.rstrip())
答案 2 :(得分:2)
无环路的:
open('dst','w').write(re.sub('\n\s*\n+','\n', open('src').read()))
答案 3 :(得分:1)
filter(bool, map(lambda x:x.rstrip(), open(filename)))
答案 4 :(得分:1)
如果你需要一个真正的单行:
python -c 'import sys; print "".join(l for l in sys.stdin.readlines() if l.strip()),'
可以在shell中使用:
cat input.txt | python -c 'import sys; print "".join(l for l in sys.stdin.readlines() if l.strip()),' > output.txt
答案 5 :(得分:1)
如果你想处理大文件而不用担心内存不足错误,你应该循环执行:
import sys
for line in sys.stdin:
if line[:-1]:
sys.stdout.write(line)
如果必须有一行代码,请在同一行中使用相同的代码:
for _ in (sys.stdout.write(line) for line in sys.stdin if line[:-1]): pass
已编辑以包含agf的提示。
答案 6 :(得分:0)
os.system("grep -v '^$' file_name > file_name")
答案 7 :(得分:0)
fileinput模块具有“inplace”选项,用于一步编辑文件。在读取文件时,标准输出会暂时重定向到输入文件。
这是一个可以做你想要的单行程(在bash中完成):
python -c $'import sys, re, fileinput\nfor line in fileinput.input("file_name", inplace=True): sys.stdout.write( re.sub(r"^\\n$", "", line) )'