使用智能格式

时间:2016-05-11 20:07:18

标签: python numpy

我有这个数据表:

enter image description here

Ciudad表示City,Fase表示阶段和Tarea mins任务

数据表以这种格式保存到文件中:

Giron 20 15,18 40 50 60,77 37 45
Floridablanca 17 13,17 35 43 55,67 39 46
Bogota 15 12,17 35 43 55,67 39 46
Cali 14 12,10 30 40 32,59 67 33

数字意味着数百万(2000万,1800万等)

每个城市都是一条线。阶段由“,”分隔,任务由空格分隔

我需要从python中读取这个文件,并能够处理每个城市的任务和阶段,计算一个城市中更昂贵的任务,最昂贵的阶段等。

问题是我真的不知道如何阅读和保存数据以便开始计算我需要计算的内容

我一直尝试使用Numpy的1d阵列和2d阵列(loadtxt,genfromtxt),但是数据输出不是很清楚,我无法弄清楚如何使用它

2 个答案:

答案 0 :(得分:3)

import re
line = 'Santa Rosa de Cabal 20 15,18 40 50 60,77 37 45'
city, phase1, phase2, phase3 = re.match(
    '(.+) (\d+ \d+),(\d+ \d+ \d+ \d+),(\d+ \d+ \d+)', line).groups()

def tasks(phase_string):
    return [int(task) for task in phase_string.split()]

print(city)
for phase in phase1, phase2, phase3:
    print(tasks(phase))

输出:

Santa Rosa de Cabal
[20, 15]
[18, 40, 50, 60]
[77, 37, 45]

这里最重要的是正则表达式。了解他们。

答案 1 :(得分:0)

这是一个简单的解析任务,但您必须分阶段处理它。首先解析一些,然后为每个位解析一点,等等。

试试这个:

#!python3
import io

File = """Giron 20 15,18 40 50 60,77 37 45
Floridablanca 17 13,17 35 43 55,67 39 46
Bogota 15 12,17 35 43 55,67 39 46
Cali 14 12,10 30 40 32,59 67 33
"""

Ciudades = {}

with io.StringIO(File) as infile:
    for line in infile:
        if line.strip():
            ciudad,costs = line.split(' ', 1)
            Ciudades[ciudad] = fases = {}
            for fase,tareacosts in enumerate(costs.split(',')):
                fn = "Fase {}".format(fase)
                fases[fn] = list(map(int, tareacosts.split(' ')))

print("Most expensive tarea in Bogota Fase 2 is:",
        max(Ciudades['Bogota']['Fase 2']))