Dize için arama txt dosyası Python
Eğer bir dize bir metin dosyası olup olmadığını kontrol etmek istiyorum. Eğer, Eğer, Eğer, Y. Ancak olmazsa X, bu kodu her zaman nedense True
döndürür. Herkes neyin yanlış olduğunu görebiliyor mu?
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"
CEVAP
Sen her zaman True
almasının sebebi zaten verilmiş, sadece bir öneri sunacağım:
Eğer dosya çok büyük değilse, bir dize içine okuyun ve o (ve daha hızlı okuma ve satır başına satır kontrol'den daha sık) kullanabilirsiniz
if 'blabla' in open('example.txt').read():
print "true"
Başka bir numara: hafifletmek olası bellek ile problem mmap.mmap()
oluşturmak için bir "sicim gibi" nesne kullanan temel dosya (yerine okuma bütün dosyasında bellek):
import mmap
f = open('example.txt')
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
if s.find('blabla') != -1:
print 'true'
NOT: python 3, mmaps gibi davranır bytearray
nesneler yerine, dizeleri, çok subsequence bakmak için find()
Bir bytes
nesne yerine bir dize de, örn. 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')
Ayrıca 15 *örneğin*, büyük / küçük harf duyarlı arama düzenli ifadeler kullanabilirsiniz: if re.search(br'(?i)blabla', s):
Python ile bir dize bir dize için bir ...
Nasıl dize Python küçük harfe dönüştür...
Nasıl belirli bir dize için depodaki G...
Nasıl bir işlev adı için Python ile bi...
Python (ekstra semboller içeren bir di...