当前位置: 代码迷 >> python >> 如何从python中的文件中提取必要的内容?
  详细解决方案

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

热度:100   发布时间:2023-06-13 14:15:04.0

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

您可以使用

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

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

对于更通用的解决方案,它允许在文件中注释( 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)
with open('private.key', 'r') as infile:
    pk = infile.read().split('\n', 1)[1].rsplit('\n', 1)[0]