将项目写入文件的单独行,末尾没有空行

时间:2012-11-11 09:02:57

标签: python

我有一个包含大量文本的文件,我想要删除,匹配一堆东西,然后将这些项目写入新文件中的单独行。

这是我放在一起的代码的基础知识:

f = open('this.txt', 'r')
g = open('that.txt', 'w')
text = f.read()
matches = re.findall('', text) # do some re matching here
for i in matches:
    a = i[0] + '\n'
    g.write(a)
f.close()
g.close()

我的问题是我希望每个匹配的项目都在一个新行上(因此'\ n'),但我不希望文件末尾有一个空行。

我想我不需要让新行字符跟踪文件中的最后一项。

什么是Pythonic排序方式?另外,我在代码中设置这个方法的方式是最好的方法,还是最Pythonic?

1 个答案:

答案 0 :(得分:6)

如果你想在它们之间写出一系列带有换行符的行,但最后没有换行符,我会使用str.join。也就是说,用这个替换你的for循环:

output = "\n".join(i[0] for i in matches)
g.write(output)

为了避免必须显式关闭文件,特别是如果您的代码可能被异常中断,您可以使用with语句使事情变得更简单。以下代码替换了您问题中的整个代码:

with open('this.txt') as f, open('that.txt', 'w') as g:
    text = f.read()
    matches = re.findall('', text) # do some re matching here
    g.write("\n".join(i[0] for i in matches))

或者,因为您不需要同时打开这两个文件:

with open('this.txt') as f:
    text = f.read()
matches = re.findall('', text) # do some re matching here
with open('that.txt', 'w') as g:
    g.write("\n".join(i[0] for i in matches))