我的txt文件包含以下数据:
3455155, 117465776, 29972373, 27226577, 64735238
我需要删除此文件中的条目,例如:3455155
我正在尝试跟随:
def remove_entry_from_file(entry_id):
f = open(file.txt, 'w+')
data = f.read()
new_data = re.sub(entry_id + '[, ]*', '' ,data)
f.write(new_data)
f.close()
结果 - 文件将被完全清除。我哪里错了?
答案 0 :(得分:6)
如果您使用w+
打开,该文件将被清空。
相反,请使用r+
。如果你这样做,你必须在写作之前回放你的文件,之后可能会截断它。
def remove_entry_from_file(entry_id):
f = open(file.txt, 'r+')
data = f.read()
new_data = re.sub(entry_id + '[, ]*', '' ,data)
f.seek(0)
f.write(new_data)
f.truncate()
f.close()
答案 1 :(得分:2)
问题是当您在w
中打开文件时,它会自动截断,因此您不会阅读任何内容:
burhan@sandbox:~/t$ cat foo.txt
0
aaaa
bbbb
cddd
dddddddd
Long sentence here which is not even read completely
The rest is ignored...
burhan@sandbox:~/t$ python
Python 2.7.3 (default, Jan 2 2013, 16:53:07)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f = open('foo.txt', 'w+')
>>> f.read()
''
您可能希望以附加模式'a'
打开文件;或者打开文件进行读取,关闭文件,然后打开文件进行写入并写入新行。
打开它进行写入将清除文件的内容。
答案 2 :(得分:1)
另一个解决方案是打开文件两次,一次读取数据,一次写入:
def remove_entry_from_file(entry_id):
with open('file.txt', 'r') as f:
data = f.read()
new_data = re.sub(entry_id + '[, ]*', '' ,data)
with open('file.txt', 'w+') as f:
f.write(new_data)
此处,context managers(with ... as ...:
之后的代码块)负责为您关闭文件。