2016-02-12 19 views
2

我有一個叫做「number_file」的10000行文件,就像這樣有四列數字。有沒有一個簡單的班輪將文本文件轉換爲Python中的字典而不使用CSV?

12123 12312321 12312312 12312312 
12123 12312321 12312312 12312312 
12123 12312321 12312312 12312312 
12123 12312321 12312312 12312312 

我需要將文件轉換成一個字典,其中第一列數字鍵和整條生產線都

到目前爲止,我想這個值,但沒有奏效。

dict((line.strip().split('\t')[0] for line in file(number_file))) 

如何解決這一個班輪,以便它將文件轉換爲字典?

+0

你是否正在這樣做,以消除重複?如果你是的話,你可以使用一套。 – JustinDanielson

回答

8

您可以使用下面的字典理解:

with open(number_file) as fileobj: 
    result = {row[0]: row[1:] for line in fileobj for row in (line.split(),)} 

其中for row in (one_element_tuple,)是一個有效的分配。

或者你可以使用一個嵌套的生成器表達式來處理每行的分裂:

with open(number_file) as fileobj: 
    result = {row[0]: row[1:] for row in (line.split() for line in fileobj)} 

然而,如果你的文件是真的製表符分隔,不懼怕csv模塊:

import csv 

with open(number_file) as fileobj: 
    result = {row[0]: row[1:] for row in csv.reader(fileobj, delimiter='\t')} 
+0

完美!第一種方法加快了 – MrDoe777

+0

@ MrDoe777:你是怎麼測試的?考慮到您的操作系統將在第一次讀取文件後緩存文件。 –

+0

高速緩存後將它們一起運行 – MrDoe777

1

split()需要maxsplit參數限制了多少次拆分字符串。

with open(file_name) as f: 
    data = dict(line.strip().split(maxsplit=1) for line in f) 
相關問題