2013-07-26 37 views
0

我需要在具有多個數據線如下文件讀取文件分割成線則:Python的嵌套for循環於每行到變量

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

格式在「Origin Time」鍵中使用空格。你確定這種格式沒有標籤嗎?至少可以使這些項目更容易解析。 –

+0

我認爲'Origin Time 06:57:04.2'顯示不能單獨依靠'str.split()'來分割變量名和值。數據線開頭的1是什麼? – RussW

回答

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

字典是未排序的,所以鍵和值以隨機順序出現。請注意,原點時間成爲鍵和值,因爲您想將空間分隔開,並且原點和時間之間有空格。乾杯!

+0

對不起,不清楚。我想在稍後階段使用原始文件中某行的某些部分。因此,對於我分割的每條線,我需要再次分割以獲取一些值。所以一旦我第二次分裂,我需要爲這些部分分配一個名字。謝謝 – Kg123

+0

好的,你能舉一個例子說明你的最終輸出應該是什麼樣的? –

+0

沒有輸出。我想採取拉特,長(和其他一些)的值,然後將它們插入到Java客戶端下載數據。因此,最終該程序應該形成如下所示的行:java -jar GeoNetCWBQuery-4.0.2-bin.jar -s「NZ ..... HH ...」-d 3600 -event:time「2008/07/05 02:12:05「-event:lat」53.88「-event:lon」152。89「-event:depth」632「其中的每個值都取自原始文件,然後在konsole命令行中運行。 – Kg123

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 
+0

你能舉個例子嗎? – Kg123

+0

我錯了,你不需要pyparsing。在編輯的答案版本中使用代碼。 – denz

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