我想学习 Python,所以我开始编写我的第一个程序,它是一个电话簿目录。 它具有添加姓名和电话号码、删除号码和搜索号码的选项。 我已经在拆卸部件上卡了大约 2 天了,就是无法正常工作。我一直在 Python IRC 和所有内容中,但一直无法弄清楚。 基本上,我的程序将数字存储到文件中的列表中。我无法弄清楚如何删除文件中的特定行但保持文件的其余部分完好无损。有人可以帮我解决这个问题吗?
有些人建议如果我创建一个临时文件,删除该行,然后将剩余的行从原始文件复制到临时文件,这样做会更容易。然后用临时文件覆盖原始文件。所以我一直在尝试这个...
if ui == 'remove':
coname = raw_input('What company do you want to remove? ') # company name
f = open('codilist.txt', 'r') # original phone number listing
f1 = open('codilist.tmp', 'a') # open a tmp file
for line in f:
if line.strip() != coname.strip():
for line in f:
f1.write(line)
break # WILL LATER OVERWRITE THE codilist.txt WITH THE TMP FILE
else:
f1.write(line)
else:
print 'Error: That company is not listed.'
f1.close()
f.close()
continue
最佳答案
我假设您的文件每一行都包含类似<名称><空白><<编号>之类的内容?如果是这种情况,您可以在 if 语句中使用类似这样的东西(不包括错误处理!):
name, num = line.strip().split()
if name != coname.strip():
# write to file
建议:
除非有某些特定原因需要您使用自定义格式,否则文件格式 json 非常适合此类任务。另请注意这些示例中“with”语句的使用,这样您就不必显式关闭文件。
写入信息:
import json
# Somehow build a dict of {coname: num,...}
info = {'companyA': '0123456789', 'companyB': '0987654321'}
with open('codilist.txt', 'w') as f:
json.dump(info, f, indent=4) # Using indent for prettier files
读取/修改文件:
import json
with open('codilist.txt', 'r+') as f:
info = json.load(f)
# Remove coname
if coname in info:
info.pop(coname)
else:
print 'No record exists for ' + coname
# Add 'companyC'
info['companyC'] = '0112233445'
# Write back to file
json.dump(info, f, indent=4)
这些示例需要 python2.6 或更高版本。如果您使用的是 2.5,则需要这些导入:
import simplejson as json
from __future__ import with_statement
希望对您有所帮助!
关于python - 如何从文件中删除特定行但保持其他行不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11148956/