问题描述
我有一个私钥文件(private.key),其内容具有以下格式
-----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"
1楼
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)
2楼
您可以使用
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
避免处理行列表中的第一行和最后一行
3楼
对于更通用的解决方案,它允许在文件中注释( 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)
4楼
with open('private.key', 'r') as infile:
pk = infile.read().split('\n', 1)[1].rsplit('\n', 1)[0]