如何将csv读入元组python列表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将csv读入元组python列表?相关的知识,希望对你有一定的参考价值。

我想我的最终名单是这种形式:

index_list=[(slice(170, 255), slice(22, 32)),
(slice(170, 255), slice(69, 79)),
(slice(170, 255), slice(118, 128)),
(slice(170, 255), slice(163, 173)),
etc
etc
etc]

但我想将元组值存储在excel中,例如,单元格A1可能是

(slice(170, 255), slice(22, 32))

...等等所有切片元组值。或者excel中的单元格可能只是具有编号值

170, 255, 22, 32

哪个python可以用来创建元组。我不关心excel中的格式是什么,我只想将值存储在那里并将它们作为具有该字符串格式的元组列表来读取。以下是我能够得到的:

with open('index_values.csv') as infile:
    reader = csv.reader(infile)
    next(reader, None)  # skip the headers
    for row in reader:
        index_list.append(tuple(str(row).replace('[','').replace(']','').replace('"','').split(', ')))
答案

您可以以第二种格式获取CSV的一行,并使用python中的ast模块来解析它:

import ast
index_list = ast.literal_eval("["+first_row+"]")

然后index_list包含你想要的东西,你只需要成对地取每个元素:

new_list = []
for i in range(0,index_list,2):
    new_list.append(slice(index_list[i],index_list[i+1]))
另一答案

如果你csv看起来像这样:

170, 255, 22, 32
125, 320, 14, 24

您可以只读取每两个值,并将这两个值的slice()存储在列表中:

import csv

index_list = []
with open('index_values.csv') as infile:
    reader = csv.reader(infile)
    for row in reader:
        line = [x.strip() for x in row]
        slices = [slice(int(x), int(y)) for x, y in zip(line[::2], line[1::2])]

        index_list.append(tuple(slices))

print(index_list)

哪些输出:

[(slice(170, 255, None), slice(22, 32, None)), (slice(125, 320, None), slice(14, 24, None))]

注意:如果没有指定,slice()的默认步长为None

以上是关于如何将csv读入元组python列表?的主要内容,如果未能解决你的问题,请参考以下文章

Python 将 csv 文件列读入列表,忽略标题

将 CSV 值读入列表字典的大多数 Pythonic 方式

将CSV文件数据读取为命名元组行的pythonic方法是啥?

使用python将csv文件转换为元组列表

如何将 csv 文件读入 SWI prolog 中的列表列表,其中内部列表代表 CSV 的每一行?

从 csv 文件创建元组列表