我在删除文本文件中的特定行/条目时遇到问题。使用代码,无论我选择删除哪个行号,都会删除文件中的第一行。
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])
答案 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
。
最后,我使用了join
和split
来简化代码,因此您不需要for循环来处理文件的行。