如何在文本文件中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。
两个问题:
-
你的函数不返回任何东西; 一个函数不显式返回任何东西返回None(这是假的)
-
真是永远是真的 – 你不检查你的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"