我在S3中有一个管道分隔文件,其中的行如下所示:
123 | "val 2" | "" | """ | | val5
我正在读取字节流,并使用csv.DictReader将其转换为字典:
data_iter = stream_from_s3_utf8(s3_stream)
csv_iter = csv.DictReader(data_iter)
当我使用软件包将文件的内容转换为python代码时,这些软件包(明智地)推断出双引号只是指示某些值应该是字符串的指示符,因此是“ val 2”(带有文字双精度字)文件中的引号)作为没有任何引号的字符串值进入我的字典。空值(上面的第五个值)和一对双引号(上面的第三个值)都作为空字符串进入我的字典。但是我需要验证文件中的引号,因此我需要访问文字引号。 (例如,上面的第三个值无效,但是第五个值是无效的。)Python中有什么方法可以在保留引号的同时读取文件的内容?
答案 0 :(得分:1)
您可以通过将import os
import xml.etree.ElementTree as ET
def process(data):
xml_obj = ET.fromstring(data)
for race in xml_obj:
for k,v in race.items():
if k == 'meetingCode' and v == '349083':
return True
return False
path = '<xml_dir>'
xml_files = os.listdir(path)
for xml_file in files:
xml_file_path = os.path.join(path, xml_file)
fp = open(xml_file_path)
data = myfile.read()
if process(data):
#copy the file
参数传递给其构造函数,来控制csv.reader的方式以及扩展的csv.DictReader的引用方式。全部可能性都在csv模块中定义,但是在这里您需要quoting
csv.QUOTE_NONE
答案 1 :(得分:0)
我知道您找到了答案,但这是一个从头开始的答案:
f = open('filename.foo')
raw = f.read()
f.close()
data = [i.strip() for i in raw.strip('|')]