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

eoigrqb6  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(431)

除了逗号(,),在.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:**对于大型复杂的文本数据库,如果值包含逗号和其他不常见的字符,有什么建议吗?使用竖线(|)代替逗号(,)有什么缺点吗?

ej83mcc0

ej83mcc01#

在CSV中使用逗号进行分析时,最常见的方法是将包含逗号的值用双引号(““)括起来。
例如,如果您有一个包含以下数据的CSV文件:

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

第三行数据的值为“Software Engineer,Team Lead”,其中包含逗号,这可能会导致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”(escape 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

相关问题