大型复杂.csv数据集的最佳逗号(,)替代方案



在定期作为列和行(如表)处理的.csv文件中,使用哪一个字符或字符串来代替逗号(,)?我的值确实包含不可预测的逗号数量和模式。

需要与python(最好是)其他应用程序兼容。我的值通常包含逗号.,所以我一直在使用",",或者更确切地说,"value"模式。我现在使用:

"column1","column2","column3" 

然而,在这些情况下,使"正确工作通常是一件痛苦的事情。

例如使用",":重新排序csv列

import csv
infilename = input('Enter .csv to rearrange: ')
with open(infilename, 'r') as infile, open('reordered__'+ infilename, 'a') as outfile:
fieldnamesout = ['B', 'C', 'A', 'D']
fieldnamesin = ['A', 'B', 'C', 'D']
reader = csv.DictReader(infile, delimiter=',', quotechar='"', fieldnames=fieldnamesin)
writer = csv.DictWriter(outfile, delimiter=',', quotechar='"', fieldnames=fieldnamesout, quoting=csv.QUOTE_ALL)
for row in reader:
writer.writerow(row)

竖线|或星形*似乎是一个很好的单字符选择,因为它们在目录和文件名中是不允许的,并且在"常规"文本中相对罕见。

Q:对于存储为文本的大型复杂数据库,如果值包含逗号和其他不寻常字符,有什么建议吗?用竖线(|)代替逗号(,)有什么缺点吗?

当您使用逗号进行分析时,考虑CSV中逗号的最常见方法是将包含逗号的值括在双引号(")中。

例如,如果您有一个CSV文件,其中包含以下数据:

Name, Age, Occupation
John, 25, Programmer
Mary, 32, Sales Manager
Tom, 28, Software Engineer, Team Lead

第三行数据具有值"0";软件工程师,团队负责人;其中有一个逗号,这可能会导致CSV解析出现问题。要转义逗号,可以将值括在双引号内,如下所示:

Name, Age, Occupation
John, 25, Programmer
Mary, 32, Sales Manager
Tom, 28, "Software Engineer, Team Lead"

如果一个值中有双引号,并且该值已经用双引号括起来,则可以通过将其加倍来转义它们。例如,考虑以下CSV数据:

Name, Age, Occupation
John, 25, Programmer
Mary, 32, Sales Manager
Tom, 28, "Software Engineer, Team Lead, ""Project Manager"""

我使用PowerBasic并编写了一个名为";eCSV";(转义csv):

' escape values for csv
' replace " with "" and wrap with ""
Function eCSV(ByVal s As String) As String   
Replace $Dq With $Dq+$Dq In s
s=$Dq+s+$Dq   
Function=s
End Function

当我写CSV时,我这样称呼:

' write line
temp=eCSV(designation)+","
temp+=eCSV(glb)+","
temp+=eCSV(sampleID)+","
temp+=eCSV(clientName)+","
temp+=eCSV(clientID)+","
temp+=eCSV(belongsTo)+","
temp+=eCSV(saveDate)+","
temp+=eCSV(arDate)+","
temp+=eCSV(artFrom+" - "+artTo+" "+artCF)+","
temp+=eCSV(subID)+$crlf

print #fNumber, temp

相关内容

最新更新