在定期作为列和行(如表)处理的.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