读取后从文本文件中删除行

2 投票
2 回答
8200 浏览
提问于 2025-04-29 17:52

我有一个名为 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的回答。

在你读完那一行后,你可以关闭文件,然后再打开它,把旧内容写回去,除了你想删除的那一行,这在之前的回答中已经提到过了:

在文件中删除特定行(python)

另一个选择是使用原地过滤,也就是用同样的文件名来输出,这样会用过滤后的内容替换掉旧文件。其实这两种方法是一样的。你只是不需要再打开和关闭文件。这部分也已经在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

祝好

撰写回答