簡體   English   中英

Python嵌套了for循環,將文件分成幾行,然后將每一行分成變量

[英]Python nested for loop to split a file into lines then each line into variables

我需要讀取一個包含多個數據行的文件,如下所示:

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

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

我不能完全確定您到底要實現什么目標,尤其是您不清楚您的表達方式:“然后將每一行分成每個空格中的變量”。

但是,假設您需要獲得包含字典列表的輸出,每個字典都包含來自行的已解析數據,那么以下內容對您將很有用:

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'}]

字典未排序,因此鍵和值以隨機順序出現。 注意,起源時間成為鍵和值,因為您想在空間上分割線,並且起源和時間之間有一個空格。 干杯!

在這種情況下,使用正則表達式可能是最簡單的,因為某些條目包含空格。

下面的表達式查找不是數字的任何內容,然后查找僅由數字,點和冒號組成的內容:

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'}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM