如何在 .txt 文件中查找特定字符串 Python
How to find a specific string in a .txt file Python
我的计算机上有一个很大的文本文件(位置:/home/Seth/documents/bruteforce/passwords.txt),我正试图在该文件中查找特定的字符串。该列表每行一个单词,215,000 lines/words。有谁知道我可以用来查找特定字符串的简单 Python 脚本?
这是我目前的代码,
f = open("home/seth/documents/bruteforce/passwords.txt", "r")
for line in f.readlines():
line = str(line.lower())
print str(line)
if str(line) == "abe":
print "success!"
else:
print str(line)
我保留 运行 脚本,但它从未在文件中找到该词(而且我确定该词在文件中)。
我的代码有问题吗?有没有比我尝试使用的方法更简单的方法?
非常感谢您的帮助。
Ps:我在 Debian Linux 笔记本电脑上使用 Python 2.7。
通常,当您从文件中读取行时,它们的末尾有一个换行符。因此,从技术上讲,它们不等于没有换行符的同一个字符串。您可以通过在目标字符串的相等性测试之前添加行 line=line.strip()
来摆脱这个字符。默认情况下,strip() 方法从调用它的字符串中删除所有白色 space(例如换行符)。
您的脚本找不到该行,因为您没有检查换行符:
您的文件由许多 "lines" 组成。每个 "line" 都以一个您没有考虑的字符结尾 - 换行符 ('\n'
1)。这是创建新行的字符 - 它是当您点击 enter 时写入文件的内容。这就是下一行的创建方式。
因此,当您从文件中读取行时,每行中包含的字符串实际上以换行符结尾。这就是您的平等测试失败的原因。相反,您应该在去掉换行符后测试该行是否相等:
with open("home/seth/documents/bruteforce/passwords.txt") as infile:
for line in infile:
line = line.rstrip('\n')
if line == "abe":
print 'success!'
1 请注意,在某些机器上,换行符实际上是两个字符 - 回车符 return (CR) 和换行符 (LF)。这个术语来自于打字机必须在要写入的纸张上跳行 space 的线宽,并且必须 returned 来容纳纸张的马车它的起始位置。当在文件的一行中看到时,它显示为 '\r\n'
那只是因为你忘了去掉每行末尾的新行字符。
line = line.strip().lower()
会有帮助。
我宁愿使用 in
关键字在一行中查找字符串。在这里,我在 csv 文件中寻找关键字 'KHANNA',对于任何此类存在,代码 returns true.
In [121]: with open('data.csv') as f:
print any('KHANNA' in line for line in f)
.....:
True
你想做什么?只是测试这个词是否在文件中?这里:
print 'abe' in open("passwords.txt").read().split()
或:
print 'abe' in map(str.strip, open("passwords.txt"))
或者如果不必 Python:
egrep '^abe$' passwords.txt
编辑:哦,我忘了 lower
。可能是因为密码通常区分大小写。但如果它对你的情况确实有意义:
print 'abe' in open("passwords.txt").read().lower().split()
or
print 'abe' in (line.strip().lower() for line in open("passwords.txt"))
or
print 'abe' in map(str.lower, map(str.strip, open("passwords.txt")))
我的计算机上有一个很大的文本文件(位置:/home/Seth/documents/bruteforce/passwords.txt),我正试图在该文件中查找特定的字符串。该列表每行一个单词,215,000 lines/words。有谁知道我可以用来查找特定字符串的简单 Python 脚本?
这是我目前的代码,
f = open("home/seth/documents/bruteforce/passwords.txt", "r")
for line in f.readlines():
line = str(line.lower())
print str(line)
if str(line) == "abe":
print "success!"
else:
print str(line)
我保留 运行 脚本,但它从未在文件中找到该词(而且我确定该词在文件中)。
我的代码有问题吗?有没有比我尝试使用的方法更简单的方法?
非常感谢您的帮助。
Ps:我在 Debian Linux 笔记本电脑上使用 Python 2.7。
通常,当您从文件中读取行时,它们的末尾有一个换行符。因此,从技术上讲,它们不等于没有换行符的同一个字符串。您可以通过在目标字符串的相等性测试之前添加行 line=line.strip()
来摆脱这个字符。默认情况下,strip() 方法从调用它的字符串中删除所有白色 space(例如换行符)。
您的脚本找不到该行,因为您没有检查换行符:
您的文件由许多 "lines" 组成。每个 "line" 都以一个您没有考虑的字符结尾 - 换行符 ('\n'
1)。这是创建新行的字符 - 它是当您点击 enter 时写入文件的内容。这就是下一行的创建方式。
因此,当您从文件中读取行时,每行中包含的字符串实际上以换行符结尾。这就是您的平等测试失败的原因。相反,您应该在去掉换行符后测试该行是否相等:
with open("home/seth/documents/bruteforce/passwords.txt") as infile:
for line in infile:
line = line.rstrip('\n')
if line == "abe":
print 'success!'
1 请注意,在某些机器上,换行符实际上是两个字符 - 回车符 return (CR) 和换行符 (LF)。这个术语来自于打字机必须在要写入的纸张上跳行 space 的线宽,并且必须 returned 来容纳纸张的马车它的起始位置。当在文件的一行中看到时,它显示为 '\r\n'
那只是因为你忘了去掉每行末尾的新行字符。
line = line.strip().lower()
会有帮助。
我宁愿使用 in
关键字在一行中查找字符串。在这里,我在 csv 文件中寻找关键字 'KHANNA',对于任何此类存在,代码 returns true.
In [121]: with open('data.csv') as f:
print any('KHANNA' in line for line in f)
.....:
True
你想做什么?只是测试这个词是否在文件中?这里:
print 'abe' in open("passwords.txt").read().split()
或:
print 'abe' in map(str.strip, open("passwords.txt"))
或者如果不必 Python:
egrep '^abe$' passwords.txt
编辑:哦,我忘了 lower
。可能是因为密码通常区分大小写。但如果它对你的情况确实有意义:
print 'abe' in open("passwords.txt").read().lower().split()
or
print 'abe' in (line.strip().lower() for line in open("passwords.txt"))
or
print 'abe' in map(str.lower, map(str.strip, open("passwords.txt")))