如何从python中的文件中提取必要的内容?

How to extract necessary content from file in python?

我有一个私钥文件 (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"

你可以使用

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

避免处理行列表中的第一行和最后一行

with open('private.key', 'r') as infile:
    pk = infile.read().split('\n', 1)[1].rsplit('\n', 1)[0]
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 KEYEND 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)