用于从python中的文件中删除空行的一行内容?

时间:2011-07-19 10:40:15

标签: python

我正在寻找一个将删除python中文件中所有空行的衬里。 python等价于 - > grep -v '^$' file_name > file_name

8 个答案:

答案 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) )'