【问题标题】:Remove line from a text file after read读取后从文本文件中删除行
【发布时间】:2014-10-26 13:23: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 时一样,我希望将其从文件中删除,因此当我再次使用该程序时,可以从第二个数字继续。

对代码有任何想法吗?

【问题讨论】:

  • 你必须重写文件——你不能删除。另外,为什么要删行?
  • 如果我想再次运行该程序,我想继续该过程而不是从头开始重新启动它
  • 最好的方法是保留一个单独的文件,其中包含从原始文件处理的最后行的编号。
  • 有一些方法可以就地更新文件(例如mmap.move()mmap.resize() 结合使用),但这很少值得付出努力。只需重写文件。

标签: python text copy line


【解决方案1】:

我想写这个作为评论,但我没有必要的点 为此,我将只写一个答案。加起来 Darren Ringer 的回答。

读取该行后,您可以关闭文件并再次覆盖 除了要删除的行之外,它与旧内容一起使用, 已在此答案中进行了描述:

Deleting a specific line in a file (python)

另一种选择是使用相同文件名的就地过滤 对于您的输出,它将用过滤后的内容替换您的旧文件。这 本质上是一样的。您只是不必再次打开和关闭文件。 1_CR 在下面的问题中也已经回答了这个问题,也可以 可以在https://docs.python.org/ (Optional in-place filtering section) 找到:

Deleting a line from a text file

适应您的情况,它看起来像这样:

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

干杯

【讨论】:

    【解决方案2】:

    您可以使用 readlines() 将所有行加载到列表中,然后当您获得要使用的行时,只需将其从列表中删除,然后将列表写入文件。每次执行读取时,您都将覆盖整个文件(不仅仅是删除内联数据),但没有其他方法可以做到这一点,同时确保文件内容是最新的(我知道)。

    【讨论】:

    • 我真的很困惑,你能写一个示例代码吗?
    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2022-12-13
    • 2019-06-08
    • 1970-01-01
    相关资源
    最近更新 更多