如何从python文件中提取必要的内容?
我有一个私钥文件(private.key)与内容的格式如下如何从python文件中提取必要的内容?
-----BEGIN PRIVATE KEY-----
blahblahblahblahblahblahblahblah
blahblahblahblahblahblahblahblah
blahblahblahblahblahblahblahblah
-----END PRIVATE KEY-----
我读的文件如下:
pk = open('private.key', 'rb').read()
如何消除第一行和最后并只提取私钥的内容到变量pk中?
期待在Python类似的东西
egrep -v "PRIVATE KEY" private.key | tr -d "\n\r"
可以使用
pk = open('file.txt', 'r').readlines() #or 'rb' if there's a need
if len(pk) > 2:
for line in pk[1:-1]:
print line,
#or do anything you like to do with line
,以避免第一和最后一行的处理行列表中
你为什么使用'rb'模式? –
因为作者正在使用它 - 当然它可能只是r –
为什么-2在这个上?我检查过它,它的工作原理 - 为什么不是这样做的好方法?事实是,我没有指出** readlines **是必要的,而不是** read ** int“第一个版本” –
with open('private.key', 'r') as infile:
pk = infile.read().split('\n', 1)[1].rsplit('\n', 1)[0]
这不起作用。打印pk现在只打印第一行。而要求是pk应该包含除BEGIN和END行之外的全部关键内容。 – KurinchiMalar
@KurinchiMalar:哎呀!对不起,在那里忘了一个可选的论点。检查编辑 – inspectorG4dget
仍然有问题。现在我正在获得所需的内容+ ----- END PRIVATE KEY ----- – KurinchiMalar
with open('private.key', 'r') as f: # use with here, it will auto close the file.
pk = f.readlines()
pk = pk[1:-1]
现在,pk
是按行保存私钥的列表。
要打印出来,你可以只使用print()
这样的:
for i in pk:
print(pk)
或者,像egrep
作用:
with open('private.key', 'r') as f: # use with here, it will auto close the file.
pk = f.read()
for i in pk:
if 'PRIVATE' not in i:
print(i)
对于更广泛的解决方案,使意见的文件中(任何在BEGIN PRIVATE KEY
和END PRIVATE KEY
之外),并且还处理一个文件中的多个私钥(但是,如果这就是你找到的第一个,就让你停止阅读蚂蚁),你可以在一台发电机用一个很简单的状态机的算法:
def private_keys(file):
key = []
inside_guards = False
for line in file:
if line == "-----BEGIN PRIVATE KEY-----":
inside_guards = True
continue
if line == "-----END PRIVATE KEY-----":
inside_guards = False
yield data
data = []
continue
if inside_guards:
data.append(line)
嗯,我认为这太复杂了。 –
没有必要为二进制读模式''b''为您的关键是base64编码。在解决了上述问题后,此模块将派上用场:https://docs.python.org/3.4/library/base64.html#module-base64。这也许有所帮助:https://python-gnupg.readthedocs.org/en/latest/gnupg.html –