在Python中删除文本文件中的一行

时间:2014-12-06 16:28:33

标签: python

我在删除文本文件中的特定行/条目时遇到问题。使用代码,无论我选择删除哪个行号,都会删除文件中的第一行。

def erase():
   contents = {}
   f = open('members.txt', 'a')
   f.close()
   f = open('members.txt', 'r')
   index = 0
   for line in f:
      index = index + 1
      contents[index] = line
      print ("{0:3d}) {1}".format(index,line))
   f.close()
   total = index
   entry = input("Enter number to be deleted")
   f = open('members.txt', 'w')
   index = 0
   for index in range(1,total):
      index = index + 1
      if index != entry:
         f.write(contents[index])

1 个答案:

答案 0 :(得分:-1)

试试这个:

import sys
import os

def erase(file):
   assert os.path.isfile(file)
   with open(file, 'r') as f:
      content = f.read().split("\n")
   #print content                                                                                                                                                                                                                                                             
   entry = input("Enter number to be deleted:")
   assert entry >= 0 and entry < len(content)
   new_file = content[:entry] + content[entry+1:]
   #print new_file                                                                                                                                                                                                                                                            
   with open(file,'w') as f:
      f.write("\n".join(new_file))

if __name__ == '__main__':
   erase(sys.argv[1])

如前所述,你从1开始的范围是不正确的。我在new_file = content[:entry] + content[entry+1:]中使用的列表切片使代码更具可读性,这是一种不太容易出现类似错误的方法。

此外,您似乎无缘无故地打开和关闭输入文件。另外,如果可能,在对文件进行操作时应使用with

最后,我使用了joinsplit来简化代码,因此您不需要for循环来处理文件的行。