引号异常中的转义引号的Python异常

时间:2018-02-14 11:47:58

标签: python regex csv

我希望将逗号分隔的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之后的逗号更改为选项卡,但我不希望这样。如何为引号和异常引号内的引号设置例外?

2 个答案:

答案 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模块可以处理这个问题。您可以设置转义字符,并使用escapechardoublequote指定转义字段中的引号:

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"""