2013-03-11 35 views
0

一個文本文件我有一個文本文件看起來像這樣:進口和排序在Python

2013-03-10 Maxi Ica Storm Lindh -805,42 3 326,22 
2013-03-07 Hemk P Matgl Dje -86,80 4 131,64 
2013-03-06 Hemk P Sthlm City -238,30 4 218,44 
2013-03-04 Hemk P Matgl Dje -150,91 4 456,74 
2013-03-02 Lidl 257/Sthlm Sveav -174,00 4 607,65 

我想將這個文件導入到蟒蛇名單都行存儲和線devided是這樣的:

2013-03-10 | Maxi Ica Storm Lindh | -805,42 | 3 326,22 

有人可以幫助我嗎?

+1

該文件中是否有選項卡,或者是否只有空格? – 2013-03-11 10:07:48

+1

你有什麼嘗試?提示:使用'split()'。但是,每個色譜柱必須由不存在於色譜柱本身中的通用分離器分離。您似乎在列中使用空格鍵字符(例如名稱),並使用它來分隔字段。您應該使用製表符分隔列或其他內容。 – Terry 2013-03-11 10:08:03

+0

@Terry:不,'split()'會將它分成許多列。 – 2013-03-11 10:09:02

回答

2

您可能有一個製表符分隔的文件。使用csv module來讀取:

import csv 

with open('somefilename.csv', 'rb') as inputfile: 
    for row in csv.reader(inputfile, delimiter='\t'): 
     print ' | '.join(row) 
0

假設你不能/不會更新的源文件,你可能無法得到解決使用正則表達式來解析線。對於你給出的輸入,這將工作(假設'線'保留你的線):

>>> import re 
>>> matcher = re.compile(r'^(\d{4}-\d{2}.\d{2})\s+(.+) (-?[\d ]+,\d{2})\s+(-?[\d, ]+)$') 
>>> formatted_lines = ["|".join(m.groups()) for m in [matcher.match(line) for line in lines]] 
>>> for line in formatted_lines: 
...  print(line) 
... 
2013-03-10|Maxi Ica Storm Lindh|-805,42|3 326,22 
2013-03-07|Hemk P Matgl Dje|-86,80|4 131,64 
2013-03-06|Hemk P Sthlm City|-238,30|4 218,44 
2013-03-04|Hemk P Matgl Dje|-150,91|4 456,74 
2013-03-02|Lidl 257/Sthlm Sveav|-174,00|4 607,65 
+0

不是pythonic的方式,但它也很酷! – 2013-03-11 10:52:54