我希望将逗号分隔的csv调整为制表符分隔符。引号之间也有逗号,所以我需要一个例外。所以,一些谷歌搜索和stackoverflow让我这样:
import re
f1 = open('query_result.csv', 'r')
f2 = open('query_result_tab_separated.csv', 'w')
for line in f1:
line = re.sub(',(?=(([^\"]*\"){2})*[^\"]*$)(?![^\[]*\])', '\t', line)
f2.write(line)
f1.close()
然而,在引号之间我也发现了转义引号\“。一行的例子:
"01-003412467812","Drontmann B.V.",1,6420,"Expert in \"Social, Life and Tech Sciences\""
我当前的代码也将Social之后的逗号更改为选项卡,但我不希望这样。如何为引号和异常引号内的引号设置例外?
答案 0 :(得分:2)
你不能用regexp做到这一点。
Python有一个csv
模块,用于执行此操作:
import csv
with open('test.csv', 'rb') as csvfile:
data = csv.reader(csvfile, delimiter=',', quotechar='"', escapechar='\\')
for row in data:
print ' | '.join(row)
答案 1 :(得分:0)
csv
模块可以处理这个问题。您可以设置转义字符,并使用escapechar
和doublequote
指定转义字段中的引号:
import csv
with open('file.csv') as infile, open('file_tabs.csv', 'w') as outfile:
r = csv.reader(infile, doublequote=False, escapechar='\\')
w = csv.writer(outfile, delimiter='\t', doublequote=False, escapechar='\\')
w.writerows(r)
这将创建一个新的制表符分隔文件,用于保留原始文件中字段中的逗号和转义引号。或者,默认设置将使用""
(双引号)来转义引号:
w = csv.writer(outfile, delimiter='\t')
会写这样的数据:
01-003412467812 Drontmann B.V. 1 6420 "Expert in ""Social, Life and Tech Sciences"""