首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在没有重复项的情况下追加到文件?

如何在没有重复项的情况下追加到文件?
EN

Stack Overflow用户
提问于 2018-08-03 05:42:40
回答 4查看 1.6K关注 0票数 0

我尝试从文件中读取数据,并仅在文件中未出现该行的情况下才将该行附加到文件中。我的代码是

代码语言:javascript
复制
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()

但是set部分似乎不起作用。我该怎么做呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-03 06:04:01

因为您没有提供任何文件,所以我创建了一个样例file.txt,其中包含

代码语言:javascript
复制
Line 1
Line 2
Line 3
Line 2
Line 4
Line 4

然后,我定义了一个带有换行符\n的字符串forwhom = 'Line 2\n'。稍微修改一下你的代码,它就会做你想要的事情。输出文件名为itsover.txt。我决定为输出文件选择一个不同的名称。

代码语言:javascript
复制
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()

输出文件包含:

代码语言:javascript
复制
Line 4
Line 1
Line 2
Line 3

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

票数 0
EN

Stack Overflow用户

发布于 2021-06-01 21:07:16

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

代码语言:javascript
复制
# open your file before the loop
with open("your text file", "r+") as f:
    for i in <your list>:
        # store values in a variable
        value = str(i) + ", " + str(x) + ", " + ...
        # append to your file without duplicates
        for line in f:
            if str(i) in line.rstrip('\r\n'):
               print("exists")
               break
        # note that else is outside the for loop
        else:
            print("Appending New Value ...")
            f.write(str(value) + "\n")
票数 0
EN

Stack Overflow用户

发布于 2018-08-03 05:55:11

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

代码语言:javascript
复制
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)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51662544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档