Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从csv文件创建元组列表_Python_List_Csv_Tuples - Fatal编程技术网

Python 从csv文件创建元组列表

Python 从csv文件创建元组列表,python,list,csv,tuples,Python,List,Csv,Tuples,我是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 sa

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

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

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

请使用csv模块。

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

如果您真的需要一个元组列表,只需要做一些小的更改

换线

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

就这样

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

为了展示一些高级Python功能:您的
load\u文件
-方法也可以如下所示:

def load_file(filename):
    with open(filename, 'Ur') as fp:
        data_list = [tuple(line.strip().split(",") for line in fp]
我在这里使用列表理解,它非常简洁,易于理解


此外,我使用
with
-语句,它将关闭文件指针,即使代码中出现异常。在处理外部资源(如文件)时,请始终将
一起使用。

只需在
行.strip().split(',')周围换行“tuple()”
,您就会得到一个元组列表。您可以在中看到它的作用。

除非我遗漏了一些细微之处-您所做的只是复制文件?为什么不使用csv模块??
def load_file(filename):
    with open(filename, 'Ur') as fp:
        data_list = [tuple(line.strip().split(",") for line in fp]