Python 如何使用每行可变列处理CSV

Python 如何使用每行可变列处理CSV,python,python-3.x,Python,Python 3.x,我有一个文件,它的标题行有固定数量的标签和可变长度的行。最后一列有一个字段,该字段实际上应该是项的子列表,但此列表被视为列的连续体 例如: Name, Address, Telephone "Bob Smith", "123 main st", "111-111-1111" "Jon Smith", "123 main st", "111-111-1111", "222-222-2222" 我最终希望遍历子列表,在本例中是电话 我尝试过使用csv dictreader,但它删除了额外的列 提前

我有一个文件,它的标题行有固定数量的标签和可变长度的行。最后一列有一个字段,该字段实际上应该是项的子列表,但此列表被视为列的连续体

例如:

Name, Address, Telephone
"Bob Smith", "123 main st", "111-111-1111"
"Jon Smith", "123 main st", "111-111-1111", "222-222-2222"
我最终希望遍历子列表,在本例中是电话

我尝试过使用csv dictreader,但它删除了额外的列

提前感谢。

如您所见:

如果一行的字段数大于
字段名
,则剩余的数据将放入列表中,并与
restkey
指定的字段名一起存储(默认为

您所要做的就是传递
restkey
参数,所有额外的值都将进入该参数

with open('yourfile.csv') as f:
    cf = csv.DictReader(f, restkey='extra')
    for row in cf:
        print(row)
将打印

{"Name": "Bob Smith", "Address": "123 main st", "Telephone": "111-111-1111"}
{"Name": "Jon Smith", "Address": "123 main st", "Telephone": "111-111-1111", "extra": ["222-222-2222"]}
如您所见:

如果一行的字段数大于
字段名
,则剩余的数据将放入列表中,并与
restkey
指定的字段名一起存储(默认为

您所要做的就是传递
restkey
参数,所有额外的值都将进入该参数

with open('yourfile.csv') as f:
    cf = csv.DictReader(f, restkey='extra')
    for row in cf:
        print(row)
将打印

{"Name": "Bob Smith", "Address": "123 main st", "Telephone": "111-111-1111"}
{"Name": "Jon Smith", "Address": "123 main st", "Telephone": "111-111-1111", "extra": ["222-222-2222"]}

您不需要
读写器
。使用标准的
读取器
和元组分配语法:

代码:

test.csv:

Name,Address,Telephone
"Bob Smith","123 main st","111-111-1111"
"Jon Smith","123 main st","111-111-1111","222-222-2222"
输出:

name:     Bob Smith
address:  123 main st
Phone #1: 111-111-1111

name:     Jon Smith
address:  123 main st
Phone #1: 111-111-1111
Phone #2: 222-222-2222

您不需要
读写器
。使用标准的
读取器
和元组分配语法:

代码:

test.csv:

Name,Address,Telephone
"Bob Smith","123 main st","111-111-1111"
"Jon Smith","123 main st","111-111-1111","222-222-2222"
输出:

name:     Bob Smith
address:  123 main st
Phone #1: 111-111-1111

name:     Jon Smith
address:  123 main st
Phone #1: 111-111-1111
Phone #2: 222-222-2222

发布代码以显示尝试总是很好的。Pandas有很棒的excel工具。请在值中使用其他分隔符,而不是逗号。一旦csv遇到逗号,它就会分裂。这就是它的工作方式!发布代码以显示尝试总是很好的。Pandas有很棒的excel工具。请在值中使用其他分隔符,而不是逗号。一旦csv遇到逗号,它就会分裂。这就是它的工作方式!这看起来很棒,但是我在星号*电话上遇到了一个错误。@yanir仅供参考我使用了Python3.6,但是我已经安装了Python3.3,它也有这个功能。我不确定它是什么时候添加的。@yanir描述了该功能,并在Python 3.0中实现了它。@yanir如果这让您感到困惑,您还需要Python 3.6作为示例中的功能。@MarkTolonen I使用的是2.7。我安装了3.7,现在可以使用了。谢谢这看起来很棒,但是我在星号*电话上遇到了一个错误。@yanir仅供参考我使用了Python3.6,但是我已经安装了Python3.3,它也有这个功能。我不确定它是什么时候添加的。@yanir描述了该功能,并在Python 3.0中实现了它。@yanir如果这让您感到困惑,您还需要Python 3.6作为示例中的功能。@MarkTolonen I使用的是2.7。我安装了3.7,现在可以使用了。谢谢