我有一个程序可以将数据输出到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
处理第二行似乎有问题。如果我将行附加到列表中,第一行似乎没问题,但第二行似乎把它作为整个事情而不再分离逗号。 我想这与“进入”
有关答案 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