2013-03-25 113 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看到它的行动。