Python理解整合

Python理解整合,python,parsing,list-comprehension,Python,Parsing,List Comprehension,我觉得必须有一种更简单(更干净)的方法在linux上使用理解来解析meminfo文件。该文件的格式为: MemTotal: 3045588 kB MemFree: 1167060 kB Buffers: 336752 kB Cached: 721980 kB SwapCached: 0 kB Active: 843592 kB Inactive: 752920 kB Ac

我觉得必须有一种更简单(更干净)的方法在linux上使用理解来解析meminfo文件。该文件的格式为:

MemTotal:        3045588 kB
MemFree:         1167060 kB
Buffers:          336752 kB
Cached:           721980 kB
SwapCached:            0 kB
Active:           843592 kB
Inactive:         752920 kB
Active(anon):     539968 kB
Inactive(anon):   134472 kB
我试图重写
循环id用于理解的
循环,发现我需要其中的3个

def parse_mem_file(memfile = '/proc/meminfo'):
    lines = open(memfile, 'r').readlines()
    lines = [line.strip('kB\n') for line in lines if line[-3:] == 'kB\n']
    lines = [line.split(':') for line in lines]
    return dict((key, int(value)) for (key, value) in lines)

print parse_mem_file()

我做错了什么?有没有合理的方法来简化这一点

我发现这个版本更具可读性:

def parse_mem_file(memfile='/proc/meminfo'):
    data = {}
    with open(memfile, 'r') as f:
        for line in f:
            key, value, size = line.split()
            if size == 'kB':
                data[key[:-1]] = int(value)
    return data

我觉得这个版本更具可读性:

def parse_mem_file(memfile='/proc/meminfo'):
    data = {}
    with open(memfile, 'r') as f:
        for line in f:
            key, value, size = line.split()
            if size == 'kB':
                data[key[:-1]] = int(value)
    return data
另一个解决方案(请注意,我使用了字符串数据-因此在您的情况下,您需要修改代码以从文件中读取数据):

另一个解决方案(请注意,我使用了字符串数据-因此在您的情况下,您需要修改代码以从文件中读取数据):


使用正则表达式和列表理解:

def parse_mem_file(memfile = '/proc/meminfo'):
    with open(memfile, 'r') as meminfo:
        return dict(
            (m.group(1), int(m.group(2)))
            for m in [re.match('(.+):\\s*(\\d+)', line) for line in meminfo]
            if m is not None)

使用正则表达式和列表理解:

def parse_mem_file(memfile = '/proc/meminfo'):
    with open(memfile, 'r') as meminfo:
        return dict(
            (m.group(1), int(m.group(2)))
            for m in [re.match('(.+):\\s*(\\d+)', line) for line in meminfo]
            if m is not None)

简短回答:regex。但是你有两个问题。@Ignacio-没有dict理解标记,第三个是生成器表达式。哦,对了。谢谢我从py3文档开始,简短的回答是:regex。但是你有两个问题。@Ignacio-没有dict理解标记,第三个是生成器表达式。哦,对了。谢谢我从py3文档开始