Python csv模块拆分字符串,而不仅仅是字段
当我运行此输入(另存为变量“line”)时: 通过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=",") 它甚至将字符串视为数组,但我不明白为什么,而且我不能只使用逗号分割
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"',]