我的计算机上有一个大文本文件(位置:/home/Seth/documents/bruteforce/passwords.txt),我正在尝试在文件中找到一个特定的字符串。该列表每行有一个单词和215,000行/单词。有没有人知道我可以用来查找特定字符串的简单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。
答案 0 :(得分:3)
我宁愿使用in
关键字来查找一行中的字符串。在这里,我在csv文件中寻找关键字'KHANNA',对于任何此类存在,代码返回true。
In [121]: with open('data.csv') as f:
print any('KHANNA' in line for line in f)
.....:
True
答案 1 :(得分:1)
通常,当您从文件中读取行时,它们最后会有换行符。因此,它们在技术上不等于没有换行符的相同字符串。您可以通过在测试之前将行line=line.strip()
添加到目标字符串中来消除此字符。默认情况下,strip()方法从调用它的字符串中删除所有空格(例如换行符)。
答案 2 :(得分:1)
这只是因为你忘了在每一行的末尾删除新的行字符。
line = line.strip().lower()
会有所帮助。
答案 3 :(得分:0)
您的脚本找不到该行,因为您没有检查换行符:
您的文件由许多"行"组成。每个"线"以你没有考虑的字符结束 - 换行符('\n'
1 )。这是创建新行的字符 - 当您按 时,它将被写入文件。这就是下一行的创建方式。
因此,当您从文件中读取行时,每行中包含的字符串实际上以换行符结尾。这就是你的相等测试失败的原因。相反,您应该在删除此换行符之后测试该行的相等性:
with open("home/seth/documents/bruteforce/passwords.txt") as infile:
for line in infile:
line = line.rstrip('\n')
if line == "abe":
print 'success!'
1 请注意,在某些机器上,换行符实际上是两个字符 - 回车符(CR)和换行符(LF)。这个术语来自于打字机必须在正在写入的纸张上跳过一行宽度的那一天,并且包含纸张的托架必须返回到它的起始位置。当在文件中的某一行中看到时,它显示为'\r\n'
答案 4 :(得分:0)
你想做什么?只测试这个单词是否在文件中?这里:
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")))