我有一个包含大量文本的文件,我想要删除,匹配一堆东西,然后将这些项目写入新文件中的单独行。
这是我放在一起的代码的基础知识:
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?
答案 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))