我想检查字符串是否在文本文件中。如果是,请执行X。如果不是,请执行Y。但是,True
由于某些原因,此代码始终返回。谁能看到哪里出了问题?
def check():
datafile = file('example.txt')
found = False
for line in datafile:
if blabla in line:
found = True
break
check()
if True:
print "true"
else:
print "false"
您一直得到的原因True
已经给出,因此我只提供另一个建议:
如果文件不是太大,则可以将其读取为字符串,然后使用它(比读取和检查每行更容易且通常更快):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
另一个技巧:您可以通过mmap.mmap()
创建使用基础文件的“字符串状”对象(而不是读取内存中的整个文件)来减轻可能的内存问题:
import mmap
with open('example.txt') as f:
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
if s.find('blabla') != -1:
print('true')
注意:在python 3中,mmap的行为类似于bytearray
对象而不是字符串,因此,例如,查找的子序列也find()
必须是bytes
对象而不是字符串。s.find(b'blabla')
:
#!/usr/bin/env python3
import mmap
with open('example.txt', 'rb', 0) as file, \
mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
if s.find(b'blabla') != -1:
print('true')
您还可以在mmap
不区分大小写的搜索中使用正则表达式:if re.search(br'(?i)blabla', s):
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句