2016-07-21 82 views
-5

這可能是非常簡單的事情,但我是全新的Python非常抱歉。中科院是我有很多包含這種類型的文本文件:如何將文本行轉換爲列?

name1 
[1.0 2.0 3.0],[1.1 2.1 3.1] 

(目錄/data/text1/1.txt)

其他文件,例如包含

name2 
[4.0 5.0 6.0],[4.1 5.1 6.1] 

(目錄/data/text2/2.txt)

和輸出應爲:

name1 
1.0 1.1 
2.0 2.1 
3.0 3.1 
name2 
4.0 4.1 
5.0 5.1 
6.0 6.1 

最好的方法是什麼?

我試着寫代碼:

with open('1.txt','r+') as f: 
    for line in f: 
     a = line.split(',', 1) 
     new_line = line[0] + '\n' + line[1] 
     f.write(new_line) 

(這也可能是非常愚蠢的)

Ex.:(it's只有兩行)

sm_CCC1OCO1 

[ 71.54252843 52.88596242 51.64903087],[ 62.07181336 44.1827499 42.9019055 ] 
+5

你好,歡迎來到SO。雖然我們很樂意爲您的代碼中的特定問題提供幫助,但SO不是一種開發人員服務,所以通常您應該展示您迄今爲止所嘗試的內容。 – spectras

+0

你想保存你的結果在一個文件或只是在Python中處理? –

+0

其實''[1.0 2.0 3.0],[1.1 2.1 3.1]''這不是一個正確的列表。你到底想要什麼? –

回答

1

您可以zipre解決你的問題。 下面是代碼:

>>> import re, os 
>>> for file in os.listdir("directory"): 
>>>  with open(file) as fp: 
>>>   for line in fp.readlines(): 
>>>   lists = [re.findall("\d+\.\d+",l) for l in line.split(',')] 
>>>   for a,b in zip(lists[0],lists[1]): 
>>>     print a, b 

對於文件的內容:

[1.0 2.0 3.0],[1.1 2.1 3.1] 

輸出:

1.0 1.1 
2.0 2.1 
3.0 3.1 

希望這是你所期待的。

+0

謝謝,這就是我想要的,但問題是我有200個這樣的文本文件,所以我想這樣做,這是沒有必要把所有的數字放在每個腳本中。 – cinnamon

+0

您可以迭代目錄中的所有文件,並直接處理文件內容即行。 – SunilT

+0

我得到了a,b in zip(列表[0],列表[1])的錯誤:列表索引超出範圍。 在第三行我應該把我的文件的名稱而不是(文件)或不? – cinnamon