python csv阅读器转义转义符本身-不产生错误

时间:2018-12-28 13:32:37

标签: python csv

我想在python csv上使用它来读取被%转义为列表的行。输入错误时,应该引发错误(或者至少应该可以检测到错误的输入)。

因此,'%%a%,b,c'的正确输入会导致['%a,b', 'c']的列表。现在,错误输入'%a%b,c'会导致产生一个['a,b', 'c']列表,但是应该引起一个错误,因为第一个转义字符%不会自动转义。

目前,我的最小工作示例代码如下,其中tag_names是结果列表:

from io import StringIO
import csv

tag_string_wrong = '%a%,b,c'
tag_string_correct = '%%a%,b,c'

csv_stream = StringIO(tag_string_wrong)

reader = csv.reader(csv_stream, delimiter = ',', escapechar = '%', quoting=csv.QUOTE_NONE, strict=True)

tag_names =  next(reader, []) 

我希望有人能帮助我。


修改: 通过评论,我发现我误解了在python csv进行转义的概念。但是我发现,当我将tag_string_wrongcsv.writer变回时,结果与输入的结果不同。 (在tag_string_correct,结果相同)

下面的代码在输出处为tag_string_wrong生成字符串a%,b,c,但在我看来,最好将它引发一个错误,因为它不能转换回与原始输入相同的值。

我会错过输出与输入不再相同的东西吗?


要转换和转换回的代码:

from io import StringIO
import csv

tag_string_wrong = '%a%,b,c'
tag_string_correct = '%%a%,b,c'

input = tag_string_wrong

# read in data

print('input = {}'.format(input))

csv_stream = StringIO(input)

reader = csv.reader(csv_stream, delimiter = ',', escapechar = '%', quoting=csv.QUOTE_NONE, strict=True)


tag_names =  next(reader, [])

print('tag_names = {}'.format(tag_names))

# read back values

csv_stream_in = StringIO()

writer = csv.writer(csv_stream_in, delimiter = ',', escapechar = '%', quoting=csv.QUOTE_NONE, strict=True)

writer.writerow(tag_names)


print('output = {}'.format(csv_stream_in.getvalue()))

0 个答案:

没有答案
相关问题