【问题标题】:How to read csv into a list of tuples python?如何将 csv 读入 python 元组列表?
【发布时间】:2018-01-01 23:25:40
【问题描述】:

我希望我的最终名单采用这种形式:

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


【解决方案1】:

你可以只取一行 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]))

【讨论】:

    【解决方案2】:

    如果你的 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(如果未指定)。

    【讨论】:

    • 对我来说这只是返回:
    猜你喜欢
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多