读取后从文本文件中删除行
我有一个名为 1.txt 的文本文件,里面包含以下内容:
123456
011111
02222
03333
我写了一个 Python 代码,它会把第一行复制到 x 个文件夹里的 number.txt 文件中,然后再把第二行复制到 x 个文件夹里:
progs = int(raw_input( "Folders Number : "))
with open('1.txt', 'r') as f:
progs2 = f.read().splitlines()
progs3 = int(raw_input( "Copy time for each line : "))
for i in xrange(progs):
splis = int(math.ceil(float(progs)/len(progs3)))
with open("{0}/number.txt".format(pathname),'w') as fi:
fi.write(progs2[i/splis])
我想修改这个代码,让它在复制完一行后把这一行从文件中删除;比如说,当代码复制了数字 123456 后,我希望它能把这行删除,这样下次我再运行程序时,就可以从第二个数字开始继续。
有没有人能给我一些关于这个代码的建议?
2 个回答
0
你可以用readlines()把所有的行都加载到一个列表里。然后,当你需要处理某一行时,就把它从列表中删除,然后再把这个列表写回文件。这样每次读取的时候,你都会覆盖整个文件(而不是只删除某一行的数据),不过我知道没有其他方法可以做到这一点,同时又能确保文件内容是最新的。
1
我想把这个写成评论,但我没有足够的积分,所以我就写成回答了。接着Darren Ringer的回答。
在你读完那一行后,你可以关闭文件,然后再打开它,把旧内容写回去,除了你想删除的那一行,这在之前的回答中已经提到过了:
另一个选择是使用原地过滤,也就是用同样的文件名来输出,这样会用过滤后的内容替换掉旧文件。其实这两种方法是一样的。你只是不需要再打开和关闭文件。这部分也已经在1_CR的回答中提到过,并且可以在https://docs.python.org/找到(可选的原地过滤部分):
根据你的情况,代码可能看起来像这样:
import fileinput
import sys, os
os.chdir('/Path/to/your/file')
for line_number, line in enumerate(fileinput.input('1.txt', inplace=1)):
if line_number == 0:
# do something with the line
else:
sys.stdout.write(line) # Write the remaining lines back to your file
祝好