从文件中删除条目

时间:2014-12-30 08:46:38

标签: python string file

我的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()

结果 - 文件将被完全清除。我哪里错了?

3 个答案:

答案 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 managerswith ... as ...:之后的代码块)负责为您关闭文件。