3

我是 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 模块的情况下创建一个包含多个元组的列表?

4

3 回答 3

8

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

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

请使用该csv模块。

于 2013-03-25T13:30:34.360 回答
7

第一个问题:为什么列表列表不好?在“鸭式打字”的意义上,这应该没问题,所以也许你再考虑一下。

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

换行

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

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

而已。

如果您想摆脱自定义代码(代码越少越好),您可以坚持使用csv模块。我强烈建议使用尽可能多的库方法。

炫耀一些高级 Python 功能:您的load_file-method 也可能如下所示:

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

我在这里使用列表推导,它非常简洁易懂。

此外,我使用with-statement,即使您的代码中发生异常,它也会关闭您的文件指针。with在处理外部资源(如文件)时,请始终使用。

于 2013-03-25T13:33:26.103 回答
1

只需将“tuple()”包裹起来line.strip().split(','),你就会得到一个元组列表。您可以在这个可运行的 gist中看到它的实际效果。

于 2013-03-25T13:37:18.433 回答