如何在文本文件中searchstring?

我想检查一个string是否在文本文件中。 如果是,则执行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的原因已经被提出,所以我只是提出另一个build议:

如果你的文件不是太大,你可以把它读入一个string,然后使用它(比读取和检查每行的行更容易和快速):

 if 'blabla' in open('example.txt').read(): print("true") 

另一个窍门是:通过使用mmap.mmap()来创build一个使用底层文件的“类string”对象(而不是读取内存中的整个文件mmap.mmap() ,可以缓解可能的内存问题:

 import mmap f = open('example.txt') s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) if s.find('blabla') != -1: print('true') 

注意:在python 3中,mmaps的行为与bytearray对象相似,而不是string,所以你用find()的子序列必须是bytes对象而不是string,例如。 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上使用正则expression式,例如不区分大小写的search: if re.search(br'(?i)blabla', s):

正如Jeffrey Said所说,你并没有检查check()的值。 另外,你的check()函数没有返回任何东西。 注意不同之处:

 def check(): datafile = file('example.txt') found = False #this isn't really necessary for line in datafile: if blabla in line: #found = True #not necessary return True return False #because you finished the search without finding anything print check() 

这里有另一种方法可能使用find函数来回答你的问题,它给你一个真正的东西的字面数值

 open('file', 'r').read().find('') 

在find写你想find的单词和'file'代表你的文件名

 if True: print "true" 

这总是发生,因为真是永远是真的。

你想要这样的东西:

 if check(): print "true" else: print "false" 

祝你好运!

您的check函数应返回found布尔值,并使用它来确定要打印的内容。

 def check(): datafile = file('example.txt') found = False for line in datafile: if blabla in line: found = True break return found found = check() if found: print "true" else: print "false" 

第二块也可以凝结成:

 if check(): print "true" else: print "false" 

我为此做了一个小function。 它在input文件中search一个单词,然后将其添加到输出文件中。

 def searcher(outf, inf, string): with open(outf, 'a') as f1: if string in open(inf).read(): f1.write(string) 
  • outf是输出文件
  • inf是input文件
  • string当然是你希望查找并添加到outf的所需string。

两个问题:

  1. 你的函数不返回任何东西; 一个函数不显式返回任何东西返回None(这是假的)

  2. 真是永远是真的 – 你不检查你的function的结果

 def check(fname, txt): with open(fname) as dataf: return any(txt in line for line in dataf) if check('example.txt', 'blabla'): print "true" else: print "false" 

如何search文件中的文本并返回find该单词的文件path(Какискатьчастьтекставфайлеивозвращятьпутькфайлувкоторомэтословонайдено)

 import os import re class Searcher: def __init__(self, path, query): self.path = path if self.path[-1] != '/': self.path += '/' self.path = self.path.replace('/', '\\') self.query = query self.searched = {} def find(self): for root, dirs, files in os.walk( self.path ): for file in files: if re.match(r'.*?\.txt$', file) is not None: if root[-1] != '\\': root += '\\' f = open(root + file, 'rt') txt = f.read() f.close() count = len( re.findall( self.query, txt ) ) if count > 0: self.searched[root + file] = count def getResults(self): return self.searched 

在Main()

 # -*- coding: UTF-8 -*- import sys from search import Searcher path = 'c:\\temp\\' search = 'search string' if __name__ == '__main__': if len(sys.argv) == 3: # создаем объект поисковика и передаем ему аргументы Search = Searcher(sys.argv[1], sys.argv[2]) else: Search = Searcher(path, search) # начать поиск Search.find() # получаем результат results = Search.getResults() # выводим результат print 'Found ', len(results), ' files:' for file, count in results.items(): print 'File: ', file, ' Found entries:' , count 

find= False

 def check(): datafile = file('example.txt') for line in datafile: if blabla in line: found = True break return found if check(): print "true" else: print "false"