如何附加到文件中而不重复?

时间:2018-08-02 21:42:40

标签: python python-3.x

仅当文件中没有出现该行时,我才尝试从该文件中读取并添加一行。我的代码是

forwhom=msg.split("for ",1)[1]
f = open("itsover.txt","r")
fl = f.readlines()
f.close()
fl.append(forwhom)
flset = list(set(fl))
f = open("itsover.txt","w")
for line in flset:
    line=line.strip()
    f.write(line+"\n")
    print(line)
f.close()

但是设置的部分似乎不起作用。我该怎么办?

3 个答案:

答案 0 :(得分:0)

由于您未提供任何文件,因此我创建了一个包含{p>

file.txt

然后,我定义一个带有换行符Line 1 Line 2 Line 3 Line 2 Line 4 Line 4 的字符串forwhom = 'Line 2\n'。在您的代码中稍作修改即可完成您想要的。输出文件名为\n。我决定为输出文件选择其他名称。

itsover.txt

输出文件包含:

f = open("file.txt","r")
fl = f.readlines()
f.close()

forwhom = 'Line 2\n'
fl.append(forwhom)
flset = list(set(fl))

f = open("itsover.txt","w")
for line in flset:
    f.write(line)
f.close()

您可以使用某种排序算法来确保输入和输出文件中的行顺序保持不变。但是我想它回答了您的问题。正如某人在评论中指出的那样,问题是Line 4 Line 1 Line 2 Line 3 中缺少的\n字符。在上面的代码中,如果将forwhom替换为forwhom = 'Line 2\n',将会看到输出结果与预期不符。

答案 1 :(得分:0)

根据我将数据作为逗号分隔值附加到文本文件 [通常在 for 循环中] 的经验,以下语法似乎工作得很好。你可能想看看。 (不使用 set btw)

error Failed to launch emulator. Reason: No emulators found as an output of `emulator -list-avds`.

答案 2 :(得分:-1)

首先阅读所有文本。检查是否需要修改,如果需要则追加。

path='/path/to/file'
content = open(path, 'r').read()
to_add='foo'
if to_add not in content:
    with open(path, 'a') as fh:
        fh.write(to_add)