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

问题描述 投票:-2回答:2

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

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(', ')))
python list csv tuples
2个回答
0
投票

您可以以第二种格式获取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]))

0
投票

如果你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

© www.soinside.com 2019 - 2024. All rights reserved.