如何从已编写为嵌套元组的csv文件导入?

Posted

tags:

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

我有一个名为'test.csv'的文件。您可以在附加的test.csv.jpg中看到前三行。

'ID','NO_QUESTION','NO_RESPONSE','VALUE','MEMORY','AVAILABILITY','CLICK_EFFET'
'34','01','01','1','1','0',('q01a01vato1dito0','q01a02vato0dito1')
'35','01','02','0','0','1',('q01a01vato0dito1','q01a02vato1dito0')

第一行是标题。其他线路的前六个位置为弦乐,但第七个位置为N弦的元组。第七个位置有括号。有时N == 0所以第七个位置是空的。

我想将它作为嵌套元组导入到我的程序中,并将其称为“数据”。我程序的.py文件与'test.csv'在同一目录中。我想要:

len(data)== test.csv的行数

len(data [x])== 7表示任意x的七个位置

len(data [x] [6])==第x行第七个位置的字符串数

这样做的pythonic方法是什么?谢谢

答案

这不是有效的CSV格式(如果是,整个元组将被转义并呈现为CSV的单个列),因此该解决方案存在风险。假设parens只是将行的末尾的变量列标记为demark(并且假设parens在其他字段中无效),则可以简单地将它们删除。它在CSV中具有变量列计数是有效的,因此python解析器不会出现问题。

使用csv.reader将给定行解析为行后,只需使用列表切片选择要保留的部分即可。

这应该保留前6个单元格和余数的计数。

import csv
import re

data = []
strip_paren = re.compile(r'()')

with open('test.csv', newline='') as fp:
    # skip header
    next(fp)
    # strip parens so lines will parse as csv
    for row in csv.reader((re.sub(r'()', '', line) for line in fp),
        quotechar="'"):
        # split row for nested data info
        data.append(row[:6] + [len(row[6:])])

print(data)

以上是关于如何从已编写为嵌套元组的csv文件导入?的主要内容,如果未能解决你的问题,请参考以下文章

将嵌套命名元组的列表展平为字典列表

从 csv 文件创建元组列表

Python:用于元组的 Pandas DataFrame

Python 避免字典和元组的多重嵌套

如何编写python程序将csv数据文件导入关系数据库而不插入重复条目

python 使用 sorted 对 列表嵌套元组的数据进行排序