我有一个名为“ test.csv”的文件。您可以在所附的test.csv.jpg中看到前三行。
/\.(?: \.)+/
第一行是标题。其他行的前六个位置为字符串,但第七个位置为N个字符串的元组。第七位置带有括号。有时N == 0,所以第七个位置是空的。
我想将其作为嵌套元组导入到我的程序中,并将其称为“数据”。我程序的.py文件与“ test.csv”位于同一目录中。我想要:
len(data)== test.csv的行数
len(data [x])== 7,表示任意x的七个位置
len(data [x] [6])==第x行第七位置内的字符串数
执行此操作的pythonic方法是什么?谢谢
答案 0 :(得分:0)
这不是有效的CSV格式(如果是,则整个元组将被转义并显示为CSV的单个列),因此此解决方案存在风险。假设parens只是将变量列标记为该行的末尾(并假定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)