我需要读取具有多个数据行的文件,如下所示:
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中编程很新。
答案 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'}