从文件中读取并移除\n和空格

2 投票
4 回答
17784 浏览
提问于 2025-04-17 10:23

我正在尝试让Python从一个文件中读取一些文本行,然后把它们转换成md5哈希值,以便和用户输入的哈希值进行比较。

我使用 f = open(file, 'r') 来打开和读取文件,一切都正常,但在计算单词的哈希值时,得到的结果并不正确。

所以我需要知道如何去掉末尾的空格或者 \n,因为这些东西导致哈希值计算错误。

如果这样说能让你明白的话。我其实不太知道该怎么表达。

代码在这里: http://pastebin.com/Rdticrbs

4 个回答

0

str.strip([chars])

这个方法会返回一个新的字符串,去掉了开头和结尾的指定字符。你可以通过传入一个字符串来告诉它要去掉哪些字符。如果你不传这个参数,或者传了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.")

这样做显然会很慢,因为每次都要对字典里的每个单词进行哈希处理。如果你要查找多个单词,应该先计算一次哈希和单词的对应关系(也就是反向查找表),然后再使用这个表。如果你的字典很大,可能需要一个大规模的键值存储库

撰写回答