2015-05-14 106 views
1

我必須從文件讀取到一個2D列表。 文件看起來像:如何分割列表元素?

傑克32
佩裏12
蒂姆·14

當我打印的清單,它看起來像:

['Jack 32', 'Perry 12', 'Tim 14'] 

但我需要它看起來像:

['Jack', '32', 'Perry', '12', 'Tim', '14'] 

到目前爲止,我的代碼如下所示:

with open('filelocation', 'r') as f: 
    content = f.readlines() 
    content = [x.strip('\n') for x in content] 
    print(content) 
+2

檢查此:http://www.tutorialspoint.com/python/string_split.htm – Nic007

+0

可能重複[如何將一個字符串拆分爲兩個整數在Python](http://stackoverflow.com/questions/6429638/如何將一個字符串拆分爲兩個整數在Python中) – felipsmartins

+0

您的x.strip('\ n')按行分割,您需要按行或空格分割 – Jblasco

回答

0

有可能比這個

In [46]: a=['Jack 32', 'Perry 12', 'Tim 14'] 

In [47]: b=[i.split() for i in a ] 
In [49]: b 
Out[49]: [['Jack', '32'], ['Perry', '12'], ['Tim', '14']] 

In [50]: [item for sublist in b for item in sublist] 
Out[50]: ['Jack', '32', 'Perry', '12', 'Tim', '14'] 
0

你可以鏈itertools.chain元素拆分每一行後一個簡單的方法:

from itertools import chain 
with open('filepath') as f: 
    content = list(chain.from_iterable(x.split() for x in f)) 
    print(content) 
['Jack', '32', 'Perry', '12', 'Tim', '14'] 

你不需要要調用.readlines,可以迭代文件對象fline.strip("\n")只是刪除換行符,你並沒有真正拆分。如果您在每一行上調用拆分,則最終將得到一個列表,如[['Jack', '32'], ['Perry', '12'], ['Tim', '14']],chain.from_iterable將來自每個子列表的元素鏈接到一個列表中。

.readlines讀取所有的行到內存中一次這對於一個小的文件都不會有問題,但如果你有大量的文件或內存的限制,你應該避免調用.read.readlines

1

使用空格作爲分隔符(默認值),將['Jack 32', 'Perry 12', 'Tim 14']中每個元素的字符串拆分。

對結果列表進行迭代平坦化。

mylist = ['Jack 32', 'Perry 12', 'Tim 14'] 
my_new_list = [] 
for l in mylist: 
    my_new_list.extend(l.split()) 

或者,你可以使用一個發電機

3

你就不能拆分的空白整個文件?

>>> with open('filelocation') as f: 
     print(f.read().split()) 

['Jack', '32', 'Perry', '12', 'Tim', '14'] 

沒有點創建結構只是爲了扁平它。

1

你應該只能讀取字符串和分割空白。

with open('filelocation') as f: 
    split_up = f.read().split() 
1

嘗試這樣的:

my_list = [] 
with open('your_file') as f: 
    for x in f: 
     my_list += x.strip().split() 
0

爲什麼不將文件流與新線之間的空間,然後由空間分割字符串?

無論如何,你想要做的就是按空間分割。

我知道這不是「最性感」的答案,但可能是最直接的用例。