我在S3中有一个管道分隔文件,其中的行如下所示:
123 | "val 2" | "" | """ | | val5
我正在读取字节流并使用csv.DictReader将其转换为字典:
data_iter = stream_from_s3_utf8(s3_stream)
csv_iter = csv.DictReader(data_iter)
当我使用包将文件的内容转换为python代码时,这些包(明智地)推断双引号只是某个值应该是字符串的指示符,因此“val 2”(带有文字双引号) file)作为字符串值进入我的字典,没有任何引号。并且空值(上面的第五个值)和一对双引号(上面的第三个值)作为空字符串进入我的字典。但是我需要在我的文件中验证引用,所以我需要访问文字引号。 (例如,上面的第三个值无效,但第五个值是。)在Python中是否有任何方法可以在保留引号的同时读取文件的内容?
你可以通过将quoting
参数传递给它的构造函数来控制csv.reader和csv.DictReader如何处理引用。整个范围的可能性在csv模块中定义,但在这里你需要csv.QUOTE_NONE
data_iter = stream_from_s3_utf8(s3_stream)
csv_iter = csv.DictReader(data_iter,quoting=csv.QUOTE_NONE)
我知道你已经找到了答案,但这是从头开始做的:
f = open('filename.foo')
raw = f.read()
f.close()
data = [i.strip() for i in raw.strip('|')]