从CSV文件创建一个元组列表

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模块?


2
除非我漏了什么微妙的点——你所做的只是复制文件? - Jon Clements
2
为什么不使用csv模块呢? - Cédric Julien
3个回答

8

split函数返回一个列表,如果你需要元组,则将其转换为元组:

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

请使用csv模块。

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(',')外面加上"tuple()",你就可以得到一个元组列表。你可以在this runnable gist中看到它的效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接