读取文本文件中的特定区域或字符串

Read specific area or string in a text file

我有一个已写入用户数据的文本文件。用户名、电子邮件和密码。

这就是用户文件现在的样子

[<< LOGIN >>]

Username: admin

Password: 12345678

E-Mail: hue@hue.hue

[<< LOGIN END >>]

现在开始提问。

如何让 python 专门读取密码?我的意思是,现在我们可能知道密码是什么以及它的长度是多少。但是当我加密它并得到一些超过 30 个字符的乱码时,我应该如何读取密码?

该行将包含密码,因此只需拆分一次并获取第二个元素:

In [20]: from simplecrypt import encrypt

In [21]: ciph = encrypt('password', "12345678")

In [22]: line = "Password: " + ciph

In [23]: line
Out[23]: 'Password: sc\x00\x01\x0cP\xa1\xee\'$"\xc1\x85\xe0\x04\xd2wg5\x98\xbf\xb4\xd0\xacr\xd3\\xbc\x9e\x00\xf1\x9d\xbe\xdb\xaa\xe6\x863Om\xcf\x0fc\xdeX\xfa\xa5\x18&\xd7\xcbh\x9db\xc9\xbeZ\xf6\xb7\xd3$\xcd\xa5\xeb\xc8\xa9\x9a\xfa\x85Z\xc5\xb3%~\xbc\xdf'

In [24]: line.split(None,1)[1]
Out[24]: 'sc\x00\x01\x0cP\xa1\xee\'$"\xc1\x85\xe0\x04\xd2wg5\x98\xbf\xb4\xd0\xacr\xd3\\xbc\x9e\x00\xf1\x9d\xbe\xdb\xaa\xe6\x863Om\xcf\x0fc\xdeX\xfa\xa5\x18&\xd7\xcbh\x9db\xc9\xbeZ\xf6\xb7\xd3$\xcd\xa5\xeb\xc8\xa9\x9a\xfa\x85Z\xc5\xb3%~\xbc\xdf'

In [25]: decrypt("password",line.split(None,1)[1])
Out[25]: '12345678'

In [26]: "12345678" == decrypt("password",line.split(None,1)[1])
Out[26]: True

当您遍历文件时,只需使用 if line.startswith("Password")...

with open(your_file) as f:
    for line in f:
       if line.startswith("Password"):
            password = line.rstrip().split(None,1)[1]
            # do your check

您可以使用 dictpickle,使用 password 作为键,然后只需进行查找:

How can I tell python to specifically read the password only?

data.txt:

[<< LOGIN >>]

Username: admin

Password: 12345678

E-Mail: hue@hue.hue

[<< LOGIN END >>]

[<< LOGIN >>]

Username: admin

Password: XxyYo345320945!@#!$@#!@#$%^%^^@#$%!@#$@!#41211 

E-Mail: hue@hue.hue

[<< LOGIN END >>]

...

import re

f = open('data.txt')

pattern = r"""
    Password     #Match the word 'Password', followed by...
    \s*          #whitespace(\s), 0 or more times(*), followed by...
    :            #a colon
    \s*          #whitespace, 0 or more times...
    (.*)         #any character(.), 0 or more times(*).  The parentheses 'capture' this part of the match.
"""

regex = re.compile(pattern, re.X)  #When you use a pattern over and over for matching, it's more efficient to 'compile' the pattern.

for line in f:
    match_obj = regex.match(line)

    if match_obj:  #then the pattern matched the line
        password = match_obj.group(1)  #group(1) is what matched the 'first' set of parentheses in the pattern
        print password

f.close()

--output:--
12345678
XxyYo345320945!@#!$@#!@#$%^%^^@#$%!@#$@!#41211

一个正则表达式(或RE)指定了一组匹配它的字符串;该模块中的函数让您检查特定字符串是否与给定的正则表达式匹配(或者给定的正则表达式是否与特定字符串匹配,这归结为同一件事)。

正则表达式可以连接起来形成新的正则表达式;如果 A 和 B 都是正则表达式,那么 AB 也是正则表达式。一般来说,如果字符串 p 匹配 A,另一个字符串 q 匹配 B,则字符串 pq 将匹配 AB。这成立,除非 A 或 B 包含低优先级操作; A和B之间的边界条件;或有编号的组参考。因此,复杂的表达式可以很容易地从更简单的原始表达式构造,就像这里描述的那样。有关正则表达式的理论和实现的详细信息,请参阅上面引用的 Friedl 书,或几乎任何有关编译器构造的教科书。

正则表达式格式的简要说明如下。有关更多信息和更温和的介绍,请参阅正则表达式 HOWTO。

https://docs.python.org/3/library/re.html#module-re