2013-03-25 111 views
3

我是python初學者,努力創建並保存包含python中csv文件元組的列表。從csv文件創建元組列表

我現在得到的代碼是:

def load_file(filename): 
    fp = open(filename, 'Ur') 
    data_list = [] 
    for line in fp: 
     data_list.append(line.strip().split(',')) 
    fp.close() 
    return data_list 

,然後我想文件

def save_file(filename, data_list): 
    fp = open(filename, 'w') 
    for line in data_list: 
     fp.write(','.join(line) + '\n') 
    fp.close() 

不幸的是,我的代碼返回一個列表的列表保存,而不是一個元組列表有沒有辦法創建一個包含多個元組而不使用csv模塊的列表?

+2

除非我失去了一些微妙的一點 - 所有你正在做的是複製文件? – 2013-03-25 13:32:12

+2

爲什麼不使用csv模塊? – 2013-03-25 13:32:17

回答

8

split返回一個列表,如果你想要一個元組,將其轉換爲一個元組:

data_list.append(tuple(line.strip().split(','))) 

請使用csv模塊。

+0

這工作完美!謝謝! – kate88 2013-03-25 13:42:31

7

第一個問題:爲什麼列表中的列表不好?在「鴨子打字」的意義上,這應該沒問題,所以也許你再想一想。

如果你真的需要一個元組列表 - 只需要很小的修改。

更改線路

 data_list.append(line.strip().split(',')) 

 data_list.append(tuple(line.strip().split(','))) 

就是這樣。

如果你想擺脫自定義代碼(少代碼是更好的代碼),你可以堅持csv-模塊。我強烈建議使用盡可能多的庫方法。

爲了炫耀一些高級Python功能:您load_file - 方法還可以是這樣的:

def load_file(filename): 
    with open(filename, 'Ur') as fp: 
     data_list = [tuple(line.strip().split(",") for line in fp] 

我在這裏使用一個列表理解,這是非常簡潔,易於理解。

另外,我用的是with語句來,這將關閉您的文件指針,即使你的代碼中發生了異常。使用外部資源(如文件)時,請始終使用with

1

只是包裝「元組()」的line.strip().split(',')四周,你會得到一個元組列表。你可以在this runnable gist看到它的行動。