Python使用带有2个分隔符的CSV

时间:2017-04-25 08:08:02

标签: python text delimiter import-from-csv

我有一个程序可以将数据输出到CSV文件中。这些文件包含2个分隔符,这些分隔符和“”用于文本。该文本还包含逗号。

我如何使用这两个分隔符?

我当前的代码为我提供了超出范围的列表索引。如果需要CSV文件,我可以提供。

当前代码:

def readcsv():
with open('pythontest.csv') as csvfile:
    dialect = csv.Sniffer().sniff(csvfile.read(1024),delimiters=',"')
    csvfile.seek(0)
    reader = csv.reader(csvfile,dialect)
    for row in reader:
        asset_ip_addresses.append(row[0])
        service_protocollen.append(row[1])
        service_porten.append(row[2])
        vurn_cvssen.append(row[3])
        vurn_risk_scores.append(row[4])
        vurn_descriptions.append(row[5])
        vurn_cve_urls.append(row[6])
        vurn_solutions.append(row[7])

我正在使用的CSV文件:http://www.pastebin.com/bUbDC419

处理第二行似乎有问题。如果我将行附加到列表中,第一行似乎没问题,但第二行似乎把它作为整个事情而不再分离逗号。 我想这与“进入”

有关

3 个答案:

答案 0 :(得分:0)

我认为你不应该定义一个自定义方言,除非我遗漏了什么。

https://dba.stackexchange.com/questions/44908/what-is-the-actual-behavior-of-compatibility-level-80表示您可以reader()作为import csv with open('pythontest.csv') as csvfile: reader = csv.reader(csvfile, delimiter=',', quotechar='"') for row in reader: #do something to the row 方法的关键字。为您的代码修改的文档中的示例:

row

"是已移除row[x]引号的行中每个项目的字符串列表。

索引超出范围的问题表明无法访问其中一个SELECT INTO

答案 1 :(得分:0)

好的,我想我明白你正在阅读什么样的文件...让我们说你的CSV文件的内容是这样的

192.168.12.255,"Great site, a lot of good, recommended",0,"Last, first, middle"
192.168.0.255,"About cats, dogs, must visit!",1,"One, two, three"

以下是允许您逐行读取的代码,引号中的文本将作为单个数组元素取出,但不会将其拆分。您需要的参数是 quoting = csv.QUOTE_ALL

import csv

with open('students.csv', newline='') as f:
    reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_ALL)
    for row in reader:
        print(row[0]) 
        print(row[1])      
        print(row[2])  
        print(row[3])     

打印输出将如下所示

192.168.12.255                                                                                                       
Great site, a lot of good, recommended                                                                               
0                                                                                                                    
Last, first, middle                                                                                                  
192.168.0.255                                                                                                        
About cats, dogs, must visit!                                                                                        
1                                                                                                                    
One, two, three  

PS解决方案基于最新的官方文档,请参阅此处https://docs.python.org/3/library/csv.html

答案 2 :(得分:0)

这样的快速解决方案怎么样? 快速修复,将在csv中分割一行,如a," b,c",d为字符串a,b,c,d

def readcsv():
with open('pythontest.csv') as csvfile:
    dialect = csv.Sniffer().sniff(csvfile.read(1024),delimiters=',"')
    csvfile.seek(0)
    reader = csv.reader(csvfile,dialect)
    for rowx in reader:
       row=[e.split(r',') if isinstance(e,str) else e for e in rowx]
       #do your stuff on row