Python嵌套for循环将文件拆分为行,然后将每行拆分为变量

时间:2013-07-26 09:58:10

标签: python loops for-loop split nested

我需要读取具有多个数据行的文件,如下所示:

1 D 65.33383 BAZ 308.1043 Year 2001 Month 01 Day 01 Lat 6.90 Long 126.58 Mag 6.4 Origin Time 06:57:04.2

我需要将文件拆分为行,然后将每行分成每行的变量。

到目前为止,我使用的嵌套循环如下:

for line in open("filename", 'r').readlines():
 variable = string.split(line)

 values = [variable]
 for value in values
 value = string.split(' ')
 year, month = value[0], value [1]

我的问题是我不知道第二个for循环中的部分需要什么?即... ... ...

我在python中编程很新。

3 个答案:

答案 0 :(得分:0)

with open('data.txt', 'r') as data:
    for _input in data:
        line = _input.split(' ')
        data = {'Index':line[0],
                'Origin Time':line[-3:][-1].strip()
                }
        data.update(dict(zip(line[1:-3][0::2], line[1:-3][1::2])))
        print data

答案 1 :(得分:0)

我不完全确定你究竟想要完成什么,有一点特别不清楚你的表达:“然后将每一行分成每个空间的变量”。

但假设您需要获取包含字典列表的输出,每个字典都包含来自该行的已解析数据,以下内容应该对您有用:

data = []
with open("file.txt") as f:
    for line in f:
        lineData = {}
        lineSplit = line.split()
        for i in range(1,len(lineSplit)-1,2):
            lineData[lineSplit[i]] = lineSplit[i+1]
        data.append(lineData)
print data

这将为您提供如下所示的输出:

[{'Origin': 'Time', 'D': '65.33383', 'BAZ': '308.1043', 'Long': '126.58', 'Month': '01', 'Mag': '6.4', 'Year': '2001', 'Lat': '6.90', 'Day': '01'}]

字典未排序,因此键和值以随机顺序显示。请注意,Origin时间变为键和值,因为您想要在空间上分割线,并且原点和时间之间存在空格。干杯!

答案 2 :(得分:0)

在这种情况下,使用正则表达式可能是最简单的,因为您的某些条目包含空格。

以下表达式可以找到不是位的任何内容,后跟只包含数字,点和冒号的内容:

import re
key_val = re.compile(r'\s*([^\d]+)\s+([\d.:]+)\s*')

mapping = dict(key_val.findall(line))

这会产生一个字典对象:

>>> import re
>>> line = '1 D 65.33383 BAZ 308.1043 Year 2001 Month 01 Day 01 Lat 6.90 Long 126.58 Mag 6.4 Origin Time 06:57:04.2\n'
>>> key_val = re.compile(r'\s*([^\d]+)\s+([\d.:]+)\s*')
>>> key_val.findall(line)
[('D', '65.33383'), ('BAZ', '308.1043'), ('Year', '2001'), ('Month', '01'), ('Day', '01'), ('Lat', '6.90'), ('Long', '126.58'), ('Mag', '6.4'), ('Origin Time', '06:57:04.2')]
>>> dict(key_val.findall(line))
{'D': '65.33383', 'BAZ': '308.1043', 'Long': '126.58', 'Month': '01', 'Origin Time': '06:57:04.2', 'Mag': '6.4', 'Year': '2001', 'Lat': '6.90', 'Day': '01'}