Python使用带有2个分隔符的CSV
我有一个将数据输出到CSV文件的程序。这些文件包含两个分隔符,分别为和“”表示文本。文本还包含逗号 如何使用这两个分隔符 我当前的代码使我的列表索引超出范围。如果需要CSV文件,我可以提供 当前代码:Python使用带有2个分隔符的CSV,python,text,delimiter,import-from-csv,Python,Text,Delimiter,Import From Csv,我有一个将数据输出到CSV文件的程序。这些文件包含两个分隔符,分别为和“”表示文本。文本还包含逗号 如何使用这两个分隔符 我当前的代码使我的列表索引超出范围。如果需要CSV文件,我可以提供 当前代码: def readcsv(): with open('pythontest.csv') as csvfile: dialect = csv.Sniffer().sniff(csvfile.read(1024),delimiters=',"') csvfile.seek(0)
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文件:
它似乎在处理第二条线路方面有问题。如果我把这些行附加到一个列表中,第一行看起来是可以的,但第二行似乎把它作为一个整体,不再分隔逗号。
我想这与“输入”有关,我不认为您需要定义自定义方言,除非我遗漏了什么 显示您可以将
quotechar
作为关键字提供给reader()
方法。为您的代码修改的文档中的示例:
import csv
with open('pythontest.csv') as csvfile:
reader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in reader:
#do something to the row
行
是删除了“
引号的行中每个项目的字符串列表
索引超出范围的问题表明无法访问
行[x]
中的一行。好的,我想我了解您正在阅读的文件类型……假设您的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"
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
这是允许您逐行读取的代码,引号中的文本将作为单个数组元素取出,但不会拆分。您需要的参数是thisquoting=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"
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解决方案基于最新的官方文档,请参见此处像这样的快速解决方案如何 这是一个快速修复方法,可以将csv中的一行像“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
请添加几行您正在阅读的CSV文件。它确实看起来像这样。我不知道您是否自己尝试过它,但输出与我在Python3中测试的不一样,我的版本是Python3.5.2,在终端中尝试此测试$Python3 readcsv.pyi制作了一个不同的CSV文件,结果相同我使用了不同的较小的CSV file以更好地显示结果。下面的屏幕截图是您的代码。我感觉问题出在您的csv文件上。我看到您在Windows上,请右键单击该文件并选择“编辑”,然后显示该文件的内容。当使用电子表格程序打开csv文件时,它应该将数据放入自己的列中:。但是,从您的屏幕截图它们都在同一列中。如果我用libreoffice打开CSV文件,所有内容都会正确显示,就像你的屏幕截图一样。如果我用记事本++()打开CSV文件,有多个引号在用excel打开时不会显示,有办法解决这个问题吗?