我正在尝试读取/写入txt文件。我想从txt文件中读取,如果原始文件中不存在该字符串,则将新字符串写入下一行。
f = open('./video/1.txt', 'a')
f.write('123' + '\n')
f.close()
with open('./video/1.txt') as o:
lines=o.readlines()
lines=set(lines)
if '123' in lines:
print("Existed")
else:print("Not Existed")
问题是:我有' 123'是1.txt文件。结果是"不存在"我试着用
for line in lines:
print(line + '\n')
打印出设置变量" lines",它在一行打印出123。我现在很困惑。是什么原因导致"不存在"?谢谢。
答案 0 :(得分:2)
您的if语句正在检查set
lines
的元素是否为&{39; 123
'
示例:
lines = ['hello there', 'hello 123 there', '123']
if '123' in lines:
print("Existed")
else:print("Not Existed")
输出:
Existed
示例:
lines = ['hello there', 'hello 123 there']
if '123' in lines:
print("Existed")
else:print("Not Existed")
输出:
Not Existed
你可以这样做:
lines = ['hello there', 'hello 123 there']
for line in lines:
if '123' in line:
print('Existed')
如果您正在从文件中读取,则可能会在您的行中获得一个尾随回车字符,这是\n
。这也可能导致您的if '123' in lines
出错,即使该行只是' 123
',现实是该行实际上是' 123\n
& #39;
示例:
ms = '123\n'
print(ms)
mb = ms.encode()
print(mb)
输出:
123
b'123\n'
在此示例输出中以及屏幕截图中,您实际上可以在输出中看到额外的回车符。因此,您的字符串不是123
'你的字符串是' 123\n
'
答案 1 :(得分:0)
感谢@Edwin van Mierlo的回答,我现在得到了这个。 这是一个' \ n' 123之后。所以,如果我使用' 123 \ n'而不是123,它显示存在。
if '123\n' in lines:
print("Existed")
else:print("Not Existed")
答案 2 :(得分:0)
迟到的回答但无论如何
我将使用lines
lines1
作为变量
In [3]: with open('1.txt') as o:
...: lines = o.readlines()
...:
In [4]: lines1 = set(lines)
如果您在lines1
上进行打印,这就是您的结果。
In [5]: print(lines1)
{'123\n'}
这会带你去哪儿?
一种可能的解决方案是使用正则表达式在集合中查找123
,如果您希望继续使用集合。
正则表达式\d+
将查找数字。
In [6]: import re
In [7]: if re.search(r'\d+', str(lines1)):
...: print('yes')
...: else:
...: print('no')
...:
yes