我是python初学者,正努力在python中创建并保存包含来自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模块的情况下创建一个包含多个元组的列表?
答案 0 :(得分:8)
split
返回一个列表,如果你想要一个元组,将它转换为一个元组:
data_list.append(tuple(line.strip().split(',')))
请使用csv
模块。
答案 1 :(得分: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
。
答案 2 :(得分:1)
只需在line.strip().split(',')
周围包装“tuple()”,您就会得到一个元组列表。您可以在this runnable gist中看到它。