使用Python将一个文本文件复制到另一个文本文件
我想把一个文本文件中的某些行复制到另一个文本文件里。在我现在的脚本中,当我搜索一个字符串时,它会把后面的所有内容都复制过来,我该怎么做才能只复制文本的某一部分呢?比如说,只复制包含“tests/file/myword”的行?
当前代码:
#!/usr/bin/env python
f = open('list1.txt')
f1 = open('output.txt', 'a')
doIHaveToCopyTheLine=False
for line in f.readlines():
if 'tests/file/myword' in line:
doIHaveToCopyTheLine=True
if doIHaveToCopyTheLine:
f1.write(line)
f1.close()
f.close()
7 个回答
9
这只是一个稍微整理过的做法。这个方法的性能和ATOzTOA的回答一样好,也没有比它更差,但没有必要使用两个单独的with语句。
with open(path_1, 'a') as file_1, open(path_2, 'r') as file_2:
for line in file_2:
if 'tests/file/myword' in line:
file_1.write(line)
10
readlines()这个方法会把整个输入文件的内容读进一个列表里,但它的效率不高。更好的做法是直接逐行读取文件中的内容。我在处理output.txt的时候用了'with',这样文件在用完后会自动关闭。对于list1.txt来说,就不需要这样做,因为当for循环结束时,文件会自动关闭。
#!/usr/bin/env python
with open('output.txt', 'a') as f1:
for line in open('list1.txt'):
if 'tests/file/myword' in line:
f1.write(line)
85
这是一行代码的写法:
open("out1.txt", "w").writelines([l for l in open("in.txt").readlines() if "tests/file/myword" in l])
推荐使用 with
语句:
with open("in.txt") as f:
lines = f.readlines()
lines = [l for l in lines if "ROW" in l]
with open("out.txt", "w") as f1:
f1.writelines(lines)
这样可以减少内存的使用:
with open("in.txt") as f:
with open("out.txt", "w") as f1:
for line in f:
if "ROW" in line:
f1.write(line)