Python:从文件inpu创建字典

2024-10-02 10:20:08 发布

您现在位置:Python中文网/ 问答频道 /正文

文件内容:

文件.txt

RPM: psmisc-22.6-24.el6.x86_64
S.5......    /sbin/fuser
RPM: python-2.7.9-0011.00.6ES.x86_64
..5......    /usr/lib64/python2.7/base64.pyc
..5......    /usr/lib64/python2.7/base64.pyo

我想创建以下数据结构-下面的示例是手动装箱的,以说明预期的输出。你知道吗

文件列表({file:verify status}对)作为pkg名称为的每个键的值:

>>> d
{'python-2.7.9-0011.00.6ES.x86_64': [{'/usr/lib64/python2.7/base64.pyc': '..5......', '/usr/lib64/python2.7/base64.pyo': '..5......'}], 'psmisc-22.6-24.el6.x86_64': [{'/sbin/fuser': 'S.5......'}]}
>>> for k, v in d.items():
...     print(k, v)
... 
('python-2.7.9-0011.00.6ES.x86_64', [{'/usr/lib64/python2.7/base64.pyc': '..5......', '/usr/lib64/python2.7/base64.pyo': '..5......'}])
('psmisc-22.6-24.el6.x86_64', [{'/sbin/fuser': 'S.5......'}])

到目前为止,我能够将pkg名称添加到字典中,但不确定如何继续:

#!/usr/bin/env python

import os

d = {}

with open('files.txt', 'r') as f:
    for line in f:
        (k, v) = line.split()
        if k.startswith('RPM'):
            d[v] = []

print(d)

测试:

$ python test.py 
{'python-2.7.9-0011.00.6ES.x86_64': [], 'psmisc-22.6-24.el6.x86_64': []}

我也不确定这个数据结构是否是最优的,所以欢迎任何建议。你知道吗


Tags: 文件txt数据结构usrpkgx86pycrpm
2条回答

您可以使用regex和itertools.groupby

import itertools
import re
new_data = [[a, list(b)] for a, b in itertools.groupby([i.strip('\n') for i in open('filename.txt')], key=lambda x:bool(re.findall('RPM:\s', x)))]
second_data = [re.sub('^RPM:\s', '', b[0]) if a else [dict([re.split('(?<=\.)\s+', c)[::-1] for c in b])] for a, b in new_data]
final_data = {second_data[i]:second_data[i+1] for i in range(0, len(second_data), 2)}

输出:

{'python-2.7.9-0011.00.6ES.x86_64': [{'/usr/lib64/python2.7/base64.pyc': '..5......', '/usr/lib64/python2.7/base64.pyo': '..5......'}], 'psmisc-22.6-24.el6.x86_64': [{'/sbin/fuser': 'S.5......'}]}
#!/usr/bin/env python

import os

d = {}

with open('files.txt', 'r') as f:
    pkg = None
    items = None
    for line in f:
        (k, v) = line.split()
        if k.startswith('RPM'):
            if pkg:
                d[pkg] = [items]
            pkg = v
            items = {}
        else:
            items[v] = k
    if pkg:
        d[pkg] = [items]

print(d)

输出:

{'psmisc-22.6-24.el6.x86_64': [{'/sbin/fuser': 'S.5......'}], 'python-2.7.9-0011.00.6ES.x86_64': [{'/usr/lib64/python2.7/base64.pyc': '..5......', '/usr/lib64/python2.7/base64.pyo': '..5......'}]}

相关问题 更多 >

    热门问题