python 从文件中删除 "many"行

标签 python list file-io

我正在尝试以

之类的方式从 python 中的文件中删除特定的行号

./foo.py 文件名.txt 4 5 2919

其中 4 5 和 2919 是行号

我想做的是:

for i in range(len(sys.argv)):
    if i>1: # Avoiding sys.argv[0,1]
        newlist.append(int(sys.argv[i]))

然后:

count=0

generic_loop{ 
   bar=file.readline()
   count+=1
   if not count in newlist:
      print bar
}

它打印原始文件中的所有行(中间有空格)

最佳答案

您可以使用 enumerate确定行号:

import sys
exclude = set(map(int, sys.argv[2:]))
with open(sys.argv[1]) as f:
    for num,line in enumerate(f, start=1):
        if num not in exclude:
            sys.stdout.write(line)

如果您从 0 开始计数,您可以删除 start=1。在上面的代码中,行号从 1 开始:

$ python3 so-linenumber.py so-linenumber.py 2 4 5
import sys
with open(sys.argv[1], 'r') as f:
            sys.stdout.write(line)

如果要将内容写入文件本身,请将其写入 temporary file而不是 sys.stdout,然后是 rename原始文件名(或在命令行上使用 sponge),如下所示:

import os
import sys
from tempfile import NamedTemporaryFile
exclude = set(map(int, sys.argv[2:]))
with NamedTemporaryFile('w', delete=False) as outf:
    with open(sys.argv[1]) as inf:
        outf.writelines(line for n,line in enumerate(inf, 1) if n not in exclude)
    os.rename(outf.name, sys.argv[1])

关于python 从文件中删除 "many"行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16391091/

相关文章:

c++ - C++ 中的延迟转换

python - 多个连接按钮 GUI PyQt5

python - 使用 sklearn 获得精确率和召回率

java - 声明一个具有多种类型的 ArrayList

java - 如何使用java将文件和文件夹列表存储在列表或设置中?

delphi - 我需要知道一种方法来确定文件是以独占模式还是以其他方式(读写等)打开?

python - 单元测试 : Assert that a file/path exists

python - 在多列 pandas 上应用 "list"函数

python - Pandas :如何在加入数据框时聚合两个列表列

java - GZIPInputStream 逐行读取