0

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

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编程很陌生。

4

3 回答 3

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
于 2013-07-26T10:21:12.067 回答
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 time 成为键和值,因为您想在空间上分割线,并且在 origin 和 time 之间有一个空格。干杯!

于 2013-07-26T10:21:38.763 回答
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'}
于 2013-07-26T10:21:43.557 回答