Python3.7 CSV从值中删除引号,引用=csv.QUOTE_无给予

2024-04-30 05:36:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图删除“我正在创建的csv文件中的符号,但它要么给我一个错误:”_csv.错误:需要转义,但没有escapechar set“或者它给了我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=''时出错。在


Tags: csvnoneidvalpassphrasefilequotewriter
1条回答
网友
1楼 · 发布于 2024-04-30 05:36:33

这是在过度复杂化,并将自定义格式与内置的csv模块混合在一起

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

相反,只需将参数写成数据的tuple,并停止使用str.format构建{}。在

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模块。在

相关问题 更多 >