我试图从我正在创建的csv文件中删除“符号”,但它要么给我一个错误:"_csv.Error:需要转义,但没有转义符集“,或者它给我每个第一个字符和最后一个字符都是quotechar='"‘。
我正在运行3.7 Python,并尝试使用以下更改来更改代码:
passphrase_writer = csv.writer(file, lineterminator='\n' ,quoting=csv.QUOTE_NONE)
#passphrase_writer = csv.writer(file, delimiter=',', lineterminator='\n',quoting=csv.QUOTE_NONE,)
#passphrase_writer = csv.writer(file, delimiter=',' ,lineterminator='\n', quoting=csv.QUOTE_NONE)
def print_dict(d,site_id):
with open('passphrases.csv', mode='w', newline='') as file:
passphrase_writer = csv.writer(file, lineterminator='\n' ,quoting=csv.QUOTE_NONE)
#passphrase_writer = csv.writer(file, delimiter=',', lineterminator='\n',quoting=csv.QUOTE_NONE,)
#passphrase_writer = csv.writer(file, delimiter=',' ,lineterminator='\n', quotechar='|')
for idx, val in enumerate(d['data']):
x = (u'{},{},{},{},{},{},{},{}'.format(val['id'],
val['Name'],
val['domain'],
val['Version'],
val['lastLoggedIn'],
val['networkInterfaces'][0]['inet'][0],
val['id2'],
passphrase(val['id'], site_id)
))
print(x)
passphrase_writer.writerow([x])打印的结果很好:
54356,tomer-a36,WORKGROUP,2.,tom,192.168.30.133,eafa2eb,DREAM
但是,csv文件将包含:"54356,tomer-a36,WORKGROUP,2.,tom,192.168.30.133,eafa2eb,DREAM"
我希望去掉多余的“
注意-当更改quotechar='|'时,我得到:|54356,tomer-a36,WORKGROUP,2.,tom,192.168.30.133,eafa2eb,DREAM|
尝试设置quotechar=''时出现错误。
发布于 2019-01-25 04:22:57
这过于复杂了&将自定义格式与内置的csv模块混合在一起
您正在传递一个已格式化的参数列表,分隔符为,。因为默认的csv分隔符已经是,,所以csv模块必须给它加引号才能使它保持为单个“单元格”。csv模块有一个安全的内置功能,可以避免数据丢失/损坏:不引用数据会使一个包含逗号的单元格与几个用逗号分隔的单元格难以区分。
相反,只需将您的参数作为数据的tuple编写,并停止使用str.format构建x。
for val in d['data']:
passphrase_writer.writerow((val['id'],
val['Name'],
val['domain'],
val['Version'],
val['lastLoggedIn'],
val['networkInterfaces'][0]['inet'][0],
val['id2'],
passphrase(val['id'], site_id)
))因为你的数据从来不包含, (你确定吗?看起来passphrase可以,实际上)你不必担心插入引号。
如果有(passphrase可能是一个很好的候选者),csv.reader将能够解析它们并删除它们以反序列化您的数据(就像Excel也会做的那样)。不要试图读取和解析回手动拆分的文件与,,再次使用csv模块。
https://stackoverflow.com/questions/54354692
复制相似问题