繁体   English   中英

python csv.reader() 如何能够读取或免除 (") 内 ("")

[英]how can python csv.reader() able to read or exempt (") inside (" ")

在我的 csv/txt 文件中有多个文本,如 ("UMBRELLA 21"") COL 50ML 将显示但下一行错误

icode,"COL 50ML",0,        ,        ,        ,1370,"cat1",1,"ecode","O"

icode,"UMBRELLA 21"",0,        ,        ,        ,0,"cat2",1,"ecode","O"
Traceback (most recent call last):
  File "C:/Users/usern/Desktop/test3.py", line 18, in 
    if x[5] == '        ':
IndexError: list index out of range
import csv

file = csv.reader((open("C:\\Users\\usern\\Desktop\\ref\\data.txt","r")).readlines())

for data in file:
    x = data
    data1 = x[0]
    data2 = x[1]
    data2 = data2.replace("'","CHAR(39)")
    data3 = x[2]
    if x[3] == '        ':
        x[3] = '0000-00-00'
    data4 = x[3]
    if x[4] == '        ':
        x[4] = '0000-00-00'
    data5 = x[4]
    if x[5] == '        ':
        x[5] = '0000-00-00'
    data6 = x[5]
    data7 = x[6]
    data8 = x[7]
    data9 = x[8]
    data10 = x[9]
    data11 = x[10]
    print(str(data1)+','+str(data2)+','+str(data3)+','+str(data4)+','+str(data5)+','+str(data6)+','+str(data7)+','+str(data8)+','+str(data9)+','+str(data10)+','+str(data11))

在 CSV 格式中,将两个引号相邻放置是在字段中嵌套引号的方法之一。 所以UMBRELLA 21之后的引号不会结束该字段,它会在下一个"后跟一个,结束。

结果,该行被解析为以下列表:

[
    'icode', 
    'UMBRELLA 21",0,        ,        ,        ,0,cat2"', 
    '1', 
    'ecode', 
    'O'
]

由于这只有 5 个字段,因此当您尝试访问x[5]时会出现错误。

如果您想在第二个字段中使用字符串UMBRELLA 21" ,则 CSV 行应该是:

icode,"UMBRELLA 21""",0,        ,        ,        ,0,"cat2",1,"ecode","O"

""解析后变成单个" ,下一个"结束字段。

您还可以对csv.reader()使用escapechar选项,并转义引号:

icode,"UMBRELLA 21\"",0,        ,        ,        ,0,"cat2",1,"ecode","O"
file = list(csv.reader((open("C:\\Users\\usern\\Desktop\\ref\\data.txt","r"), escapchar='\\'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM