首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3.7- CSV -从值中删除引号,quoting=csv.QUOTE_NONE给出错误

Python3.7- CSV -从值中删除引号,quoting=csv.QUOTE_NONE给出错误
EN

Stack Overflow用户
提问于 2019-01-25 04:18:26
回答 1查看 271关注 0票数 0

我试图从我正在创建的csv文件中删除“符号”,但它要么给我一个错误:"_csv.Error:需要转义,但没有转义符集“,或者它给我每个第一个字符和最后一个字符都是quotechar='"‘。

我正在运行3.7 Python,并尝试使用以下更改来更改代码:

代码语言:javascript
复制
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=''时出现错误。

EN

回答 1

Stack Overflow用户

发布于 2019-01-25 04:22:57

这过于复杂了&将自定义格式与内置的csv模块混合在一起

您正在传递一个已格式化的参数列表,分隔符为,。因为默认的csv分隔符已经是,,所以csv模块必须给它加引号才能使它保持为单个“单元格”。csv模块有一个安全的内置功能,可以避免数据丢失/损坏:不引用数据会使一个包含逗号的单元格与几个用逗号分隔的单元格难以区分。

相反,只需将您的参数作为数据的tuple编写,并停止使用str.format构建x

代码语言:javascript
复制
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模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54354692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档