Python 从文件读取并删除\n和空格

Python 从文件读取并删除\n和空格,python,file-io,Python,File Io,我试图让python从一个文件中读取一些文本行,然后将它们转换为md5散列,与用户输入的散列进行比较 我使用f=open(file,'r')打开并读取文件,一切正常,但当它对单词进行散列时,它不是该单词的正确散列 因此,我需要知道如何删除导致散列错误的空格或结尾处的\n 如果这有道理的话。我真的不知道该怎么说 守则: 返回包含前导字符和尾随字符的字符串副本 已删除。chars参数是一个字符串,用于指定 要删除的字符。如果省略或无,则chars参数 默认为删除空白。chars参数不是前缀或前缀

我试图让python从一个文件中读取一些文本行,然后将它们转换为md5散列,与用户输入的散列进行比较

我使用
f=open(file,'r')
打开并读取文件,一切正常,但当它对单词进行散列时,它不是该单词的正确散列

因此,我需要知道如何删除导致散列错误的空格或结尾处的
\n


如果这有道理的话。我真的不知道该怎么说

守则:

返回包含前导字符和尾随字符的字符串副本 已删除。chars参数是一个字符串,用于指定 要删除的字符。如果省略或无,则chars参数 默认为删除空白。chars参数不是前缀或前缀 后缀相反,其值的所有组合都被剥离:

>>> s = "  Hello   \n".strip()
>>> print(s)
... Hello
在代码中,添加以下内容

返回包含前导字符和尾随字符的字符串副本 已删除。chars参数是一个字符串,用于指定 要删除的字符。如果省略或无,则chars参数 默认为删除空白。chars参数不是前缀或前缀 后缀相反,其值的所有组合都被剥离:

>>> s = "  Hello   \n".strip()
>>> print(s)
... Hello
在代码中,添加以下内容


您可以这样打开文件:

with open('file', 'r') as f:
    for line in f:
         do_somthing_with(line.strip())
strip()
将返回删除前导字符和尾随字符的字符串副本


编辑:多亏了
Katrielex
的评论,我纠正了我的错误(我不知道为什么我会相信我之前发布的内容)。抱歉。

您可以这样打开文件:

with open('file', 'r') as f:
    for line in f:
         do_somthing_with(line.strip())
def readStripped(path):
    with open('file') as f:
        for line in f:
            yield f.strip()

dict((line, yourHash(line)) for line in readStripped(path))
strip()
将返回删除前导字符和尾随字符的字符串副本


编辑:多亏了
Katrielex
的评论,我纠正了我的错误(我不知道为什么我会相信我之前发布的内容)。我的道歉。

我刚刚重写了你的pastebin代码,因为它不好。你为什么要递归地写它?(行
sys.setrecursionlimit(10000000)
可能是您做错了什么的线索!)

def readStripped(path):
    with open('file') as f:
        for line in f:
            yield f.strip()

dict((line, yourHash(line)) for line in readStripped(path))

这显然会很慢,因为它每次都会对单词列表中的每个单词进行哈希运算。如果要在单词列表中查找多个单词,则应计算(一次)哈希到单词的映射(反向查找表)并使用该映射。如果你的单词列表很大,你可能需要一个新的密码。

我刚刚重写了你的pastebin代码,因为它不好。你为什么要递归地写它?(行
sys.setrecursionlimit(10000000)
可能是您做错了什么的线索!)


这显然会很慢,因为它每次都会对单词列表中的每个单词进行哈希运算。如果要在单词列表中查找多个单词,则应计算(一次)哈希到单词的映射(反向查找表)并使用该映射。如果你的词表很大,你可能需要一个单词表。

“我真的不知道怎么用词。”。如有疑问,请显示(1)代码、(2)输入、(3)实际输出和(4)预期输出。请使用代码、输入、实际输出和预期输出更新问题。请发布显示问题的最小代码片段。“我真的不知道如何用词。”。如有疑问,请显示(1)代码、(2)输入、(3)实际输出和(4)预期输出。请使用代码、输入、实际输出和预期输出更新问题。请发布显示问题的最小代码。不,不会与f中的行的代码>的结果完全相同,只是它首先将整个文件读入内存,这是一种浪费。另外,不要隐藏内置类
文件
@katrielex:我的道歉,你肯定是对的,我不知道为什么我相信这一点。我通常使用
python-3
编写,因此我没有内置类
文件的问题,但为了
python-2
兼容性,我还是将其改为
f
。@Katrielex:我认为使用
readlines()
更好,通过这种方式,代码可以与
python-2
python-3
一起运行。自版本2.3()以来,python 2就支持对文件对象进行迭代。你试过了吗?您可能会惊讶于有多少Python3特性被后端口到Python2!不,不会的与f中的行的代码>的结果完全相同,只是它首先将整个文件读入内存,这是一种浪费。另外,不要隐藏内置类
文件
@katrielex:我的道歉,你肯定是对的,我不知道为什么我相信这一点。我通常使用
python-3
编写,因此我没有内置类
文件的问题,但为了
python-2
兼容性,我还是将其改为
f
。@Katrielex:我认为使用
readlines()
更好,通过这种方式,代码可以与
python-2
python-3
一起运行。自版本2.3()以来,python 2就支持对文件对象进行迭代。你试过了吗?您可能会惊讶于有多少Python3特性被后端口到Python2!我知道该怎么做,但我该如何将其应用到这是你在写一个(糟糕的)密码破解程序?我知道该如何做,但我该如何将其应用到这是你在写一个(糟糕的)密码破解程序?我用f作为打开的(原始输入(“单词列表路径”):SyntaxError:无法将其作为错误分配到函数调用。抱歉,我打字时没有思考。您应该使用
语句查看
,因为您以前从未见过它:它太棒了!(已修复。)我将f作为打开(原始输入(“单词列表路径”):SyntaxError:无法分配给函数调用,因为这是一个错误。抱歉,我键入时没有考虑。您应该使用
语句查看
,因为您以前从未见过它:它太棒了!(固定)