的Python:
我有一个特定的词,我在一个大尺寸的文本文件中查找数百万条记录。
所以实际上我想搜索文件中是否有特定的字符串。
我做的一种方式是:
with open('ip.log', 'r') as f:
for line in f:
if semething in line:
break
else:
print 'Not found'
但是对于小文件,这个过程会很好,但是当文件大小增加或记录增长到数千万时。将大文件放入内存可能不是一个可行的解决方案。
有没有更好的方法来解决这个问题?
观察:
答案 0 :(得分:1)
您的担忧是没有根据的:您的代码不会将整个文件加载到内存中 - 试试吧!一旦找到您搜索的单词,循环中的dyld: Library not loaded: @rpath/StarscreamSocketIO.framework/StarscreamSocketIO
Referenced from: /private/var/containers/Bundle/Application/69ADA4FD-59A0-4840-9A64-XXXXX/XXXX.app/Frameworks/SocketIO.framework/SocketIO
Reason: image not found
就会停止读取该文件,因此也不用担心。
在您的代码中,break
是一个文件对象,当与f
循环一起使用时,它一次读取一行。如果您已写入for
或f.readlines()
,然后,您将阅读整个文件。
唯一可能的问题是,如果您的文件不包含换行符(例如,如果它们是二进制文件,或者是由空格而不是换行符分隔的大量单词列表)。在这种情况下,您需要使用f.read()
之类的内容来读取字符块(并处理跨块的单词)。由于您的用例涉及常规文本文件,因此无需担心。
答案 1 :(得分:0)
使用with open('ip.log', 'r') as f:
if any(line for line in f if something in line):
break
else:
print 'Not found'
功能。它将在第一个匹配时停止,并且不会将整个文件加载到内存中。这非常有效。
driver