从csv文件创建元组列表

kat*_*e88 3 python csv tuples list

我是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
Run Code Online (Sandbox Code Playgroud)

然后我想保存文件

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

不幸的是,我的代码返回一个列表列表,而不是一个元组列表...有没有办法在不使用csv模块的情况下创建一个包含多个元组的列表?

Pav*_*sov 8

split 返回一个列表,如果你想要一个元组,将它转换为一个元组:

    data_list.append(tuple(line.strip().split(',')))
Run Code Online (Sandbox Code Playgroud)

请使用该csv模块.


Tho*_*anz 7

第一个问题:为什么列表清单不好?在"鸭子打字"的意义上,这应该是好的,所以也许你再想一想.

如果你真的需要一个元组列表 - 只需要进行小的更改.

改变线

        data_list.append(line.strip().split(','))
Run Code Online (Sandbox Code Playgroud)

        data_list.append(tuple(line.strip().split(',')))
Run Code Online (Sandbox Code Playgroud)

而已.

如果您想要摆脱自定义代码(代码更少代码更好),您可以坚持使用csv -module.我强烈建议尽可能多地使用库方法.

为了展示一些高级Python功能:你的load_file方法也可能如下所示:

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

我在这里使用列表理解,它非常简洁易懂.

另外,我使用with-statement,它会关闭你的文件指针,即使你的代码中发生了异常.使用with外部资源(如文件)时请始终使用.