用python删除文件中的行的更好方法?

2024-09-27 09:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想删除文件中的一行;当前我正在创建一个新文件,复制除要删除的行之外的每一行,删除旧文件,并将新文件重命名为与旧文件名相同的文件名。有更好的方法可以删除一条线吗?

f = open('./todo.txt', 'r')
newF = open('./todo-run.txt', 'a')
lines = f.readlines()
cLine = lines[int(index) - 1]

for line in lines:
  if line != cLine:
    newF.write(line)
f.close()
newF.close()
os.remove('./todo.txt')
shutil.move('./todo-run.txt', './todo.txt')

Tags: 文件方法runtxtclose文件名lineopen
3条回答

用什么方法更好?例如,您可以在文件中对数据进行无序处理,然后截断它,使用较少的内存,但需要更多的查找(特别是如果您调整它以使其不在一个块中读取后面的部分):

def cutfile(file, startcut, endcut):
  file.seek(endcut)
  dataafter=file.read()
  file.seek(startcut)
  file.write(dataafter)
  file.truncate()

或者您无法在重命名之前删除旧文件,以获取原子更新。这取决于你的目标。在

它并不比你的好多少,但是(因为你的文件似乎可以放在主内存中),你可以试试这个:

f = open(filepath, 'r')
lines = [line.rstrip('\n') for line in f if not <CONDITION>]
f.close()
f.open('filepath, 'w')
f.write('\n'.join(lines))
f.close()

sed中的一个解决方案,您可以使用“subprocess”调用它。例如,要删除第18行,请执行以下操作:

sed -i '18 d' filename

相关问题 更多 >

    热门问题