读取文本文件中的特定区域或字符串
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
您可以使用 dict
和 pickle
,使用 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。
我有一个已写入用户数据的文本文件。用户名、电子邮件和密码。
这就是用户文件现在的样子
[<< 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
您可以使用 dict
和 pickle
,使用 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。