SORU
9 ŞUBAT 2011, ÇARŞAMBA


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
9 ŞUBAT 2011, ÇARŞAMBA


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):

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chickenby

    chickenby

    2 HAZİRAN 2008
  • Emotional Trancer

    Emotional Tr

    4 Mart 2010
  • New Scientist

    New Scientis

    27 Kasım 2006