Alasan mengapa Anda selalu mendapat True
sudah diberikan, jadi saya hanya akan menawarkan saran lain:
Jika file Anda tidak terlalu besar, Anda dapat membacanya menjadi string, dan gunakan saja (lebih mudah dan sering lebih cepat daripada membaca dan memeriksa baris per baris):
with open('example.txt') as f:
if 'blabla' in f.read():
print("true")
Trik lain: Anda dapat mengurangi kemungkinan masalah memori dengan menggunakan mmap.mmap()
untuk membuat objek "string-like" yang menggunakan file yang mendasarinya (alih-alih membaca seluruh file dalam memori):
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')
CATATAN: dalam python 3, mmaps berperilaku seperti bytearray
objek daripada string, jadi selanjutnya yang Anda cari find()
harus menjadi bytes
objek daripada string juga, misalnya. 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')
Anda juga bisa menggunakan ekspresi reguler pada mmap
mis., Pencarian case-sensitive:if re.search(br'(?i)blabla', s):
'blabla' in open('example.txt').read()
pada python saya 2.7s.find('blabla')
(periksa -1). Saya bisa bersumpah dulu bekerja denganin
baik ... Tapi sepertinya sekarangin
hanya bekerja untuk karakter tunggal ...if 'blabla' in open('example.txt').read(): print "true"
==> Bagaimana kita bisa menutupexample.txt
file dalam kasus ini?open
secara umum harus dirangkum dalam sebuahwith
pernyataan:with open(file_name) as fl: return text in fl.read()
Seperti Jeffrey Said, Anda tidak memeriksa nilai
check()
. Selain itu,check()
fungsi Anda tidak mengembalikan apa pun. Perhatikan perbedaannya:Kemudian Anda dapat menguji output dari
check()
:sumber
Berikut cara lain untuk menjawab pertanyaan Anda menggunakan fungsi find yang memberi Anda nilai numerik literal dari tempat sesuatu yang sebenarnya
di find tulis kata yang ingin Anda temukan dan
'file'
singkatan dari nama file Andasumber
Ini selalu terjadi karena Benar selalu Benar.
Anda menginginkan sesuatu seperti ini:
Semoga berhasil!
sumber
Saya membuat sedikit fungsi untuk tujuan ini. Itu mencari kata dalam file input dan kemudian menambahkannya ke file output.
sumber
check
Fungsi Anda harus mengembalikanfound
boolean dan menggunakannya untuk menentukan apa yang akan dicetak.blok kedua juga bisa diringkas menjadi:
sumber
Dua masalah:
Fungsi Anda tidak mengembalikan apa pun; fungsi yang tidak secara eksplisit mengembalikan apa pun mengembalikan Tidak ada (yang palsu)
Benar selalu Benar - Anda tidak memeriksa hasil fungsi Anda
.
sumber
Cara mencari teks dalam file dan Mengembalikan path file di mana kata itu ditemukan (Как искать часть текста в файле и возвращять путь к файлу в которомововоло)
Di Main ()
sumber
ditemukan = Salah
sumber
Jika pengguna ingin mencari kata dalam file teks yang diberikan.
sumber
sumber