从文件中读取并移除\n和空格
我正在尝试让Python从一个文件中读取一些文本行,然后把它们转换成md5哈希值,以便和用户输入的哈希值进行比较。
我使用 f = open(file, 'r')
来打开和读取文件,一切都正常,但在计算单词的哈希值时,得到的结果并不正确。
所以我需要知道如何去掉末尾的空格或者 \n
,因为这些东西导致哈希值计算错误。
如果这样说能让你明白的话。我其实不太知道该怎么表达。
代码在这里: http://pastebin.com/Rdticrbs
4 个回答
0
这个方法会返回一个新的字符串,去掉了开头和结尾的指定字符。你可以通过传入一个字符串来告诉它要去掉哪些字符。如果你不传这个参数,或者传了None,它默认会去掉空格。需要注意的是,chars参数并不是只去掉开头或结尾的字符,而是会去掉所有组合的这些字符:
>>> s = " Hello \n".strip() >>> print(s) ... Hello
在你的代码中,添加这个。
words = lines[num].strip()
1
你可以这样打开文件:
with open('file', 'r') as f:
for line in f:
do_somthing_with(line.strip())
来自官方文档,strip()
会 返回一个去掉开头和结尾字符的字符串副本。
编辑: 感谢 katrielalex
的评论,我纠正了我的错误(我也不知道之前为什么会相信我发的内容)。对此我表示歉意。
3
我刚刚重写了你在pastebin上的代码,因为它写得不好。你为什么要用递归的方式写呢?(那行sys.setrecursionlimit(10000000)
可能就是个提示,说明你做错了什么!)
import md5
hashed = raw_input("Hash:")
with open(raw_input("Wordlist Path: ")) as f:
for line in f:
if md5.new(line.strip()).hexdigest() == hashed:
print(line.strip())
break
else:
print("The hash was not found. Please try a new wordlist.")
raw_input("Press ENTER to close.")
这样做显然会很慢,因为每次都要对字典里的每个单词进行哈希处理。如果你要查找多个单词,应该先计算一次哈希和单词的对应关系(也就是反向查找表),然后再使用这个表。如果你的字典很大,可能需要一个大规模的键值存储库。