Python csv模块拆分字符串,而不仅仅是字段

Python csv模块拆分字符串,而不仅仅是字段,python,string,csv,Python,String,Csv,当我运行此输入(另存为变量“line”)时: 通过csv阅读器: for row in csv.reader(line): print row 它拆分字符串,而不仅仅是字段 ['x'] ['s'] ['c'] ['_'] ['i'] ['', ''] ['2'] ['0'] ['2'] ['', ''] 等等 即使我显式设置了分隔符,它也会显示此行为: csv.reader(line, delimiter=",") 它甚至将字符串视为数组,但我不明白为什么,而且我不能只使用逗号分割

当我运行此输入(另存为变量“line”)时:

通过csv阅读器:

for row in csv.reader(line):
    print row
它拆分字符串,而不仅仅是字段

['x']
['s']
['c']
['_']
['i']
['', '']
['2']
['0']
['2']
['', '']
等等

即使我显式设置了分隔符,它也会显示此行为:

csv.reader(line, delimiter=",")
它甚至将字符串视为数组,但我不明白为什么,而且我不能只使用逗号分割,因为许多逗号在输入的“”字符串中

Python 2.7,如果有必要的话。

的第一个参数应该是包含csv行的iterable对象。在您的例子中,输入是一个包含一行的字符串(也是可编辑的)。您需要将
括在列表中:

for row in csv.reader([line]):
    print row
演示:


以防万一,您希望看到
re
发挥作用

import re
line='xsc_i,202,"House of Night",21,"/21_202"'
print map(lambda x:x.strip('"'),re.split(r',(?=(?:[^"]*"[^"]*")*[^"]*$)',line))

输出:
['xsc_i','202','House of Night','21','21_202']

这是因为csv.reader

支持迭代器协议并返回字符串的任何对象 每次调用其next()方法时

您已向读取器传递了一个字符串

如果你说:

line = ['xsc_i,202,"House of Night",21,"/21_202"',]
您的代码应该按预期工作。
请看

很好,投票结果为上-如果我们将输入更改为
>>>行='''xsc_i',202,“夜之屋”,21,'/21_202''
,那么它将生成输出为
[“'xsc_i'”,'202','House of Night','21','/21_202']
,所以问题是
为什么会出现以及为什么
没有输出?@Clay Shrinky:你为什么关心‘和’?你不应该。
import re
line='xsc_i,202,"House of Night",21,"/21_202"'
print map(lambda x:x.strip('"'),re.split(r',(?=(?:[^"]*"[^"]*")*[^"]*$)',line))
line = ['xsc_i,202,"House of Night",21,"/21_202"',]