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

时间:2018-01-01 23:25:40

标签: python list csv tuples

我希望我的最终名单成为这种形式:

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(', ')))

2 个答案:

答案 0 :(得分:0)

你可以用 second 格式取一行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]))

答案 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