python:从.txt读取并判断txt文件中的新字符串

时间:2018-05-08 06:20:05

标签: python python-3.x

我正在尝试读取/写入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。我现在很困惑。是什么原因导致"不存在"?谢谢。

更新:我上传了截图。仍然困惑。enter image description here

3 个答案:

答案 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