我尝试从文件中读取数据,并仅在文件中未出现该行的情况下才将该行附加到文件中。我的代码是
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部分似乎不起作用。我该怎么做呢?
发布于 2018-08-03 06:04:01
因为您没有提供任何文件,所以我创建了一个样例file.txt
,其中包含
Line 1
Line 2
Line 3
Line 2
Line 4
Line 4
然后,我定义了一个带有换行符\n
的字符串forwhom = 'Line 2\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
您可以使用某种排序算法来确保输入和输出文件中的行的顺序保持不变。但我猜它回答了你的问题。问题是,正如有人在评论中指出的那样,forwhom
中缺少\n
字符。在上面的代码中,如果您将forwhom = 'Line 2\n'
替换为forwhom = 'Line 2'
,您将看到输出将不会像预期的那样。
发布于 2021-06-01 21:07:16
根据我在处理将数据作为逗号分隔值附加到文本文件的经验,以下语法似乎工作得很好。你可能想去看看。(不使用set btw)
# 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")
发布于 2018-08-03 05:55:11
首先阅读所有文本。检查是否需要修改,如果需要则追加。
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)
https://stackoverflow.com/questions/51662544
复制相似问题