首页 > 解决方案 > 我需要编辑一个 python 脚本以从 csv 中删除引号,然后写回同一个 csv 文件,引号被删除

问题描述

我看过与此类似的帖子,但它们似乎都是打印语句(查看清理后的数据),而不是用清理后的数据覆盖原始 csv,所以我被卡住了。当我尝试自己写回 csv 时,它只是删除了文件中的所有内容。这是csv的格式:

30;"unemployed";"married";"primary";"no";1787;"no";"no";"cellular";19;"oct";79;1;-1;0;"unknown";"no"
33;"services";"married";"secondary";"no";4747;"yes";"cellular";11;"may";110;1;339;2;"failure";"no"
35;"management";"single";"tertiary";"no";1470;"yes";"no";"cellular";12;"apr"185;1;330;1;"failure";"no"

它由分号分隔,这很好,但所有文本都用引号括起来,我只想删除引号并写回文件。这是我恢复的代码,它成功读取了文件,删除了所有引号,然后打印了结果:

import csv
f = open("bank.csv", 'r')
try:
    for row in csv.reader(f, delimiter=';', skipinitialspace=True):
        print(' '.join(row))
finally:
        f.close()

任何有关正确写回 csv 的帮助将不胜感激,谢谢!

标签: pythoncsvexport-to-csv

解决方案


请参阅此处:Python CSV:从值中删除引号

根据 csv 的大小,我基本上以两种不同的方式完成了此操作。

  1. 您可以将整个 csv 读入 python 对象(列表),做一些事情,然后用清理后的版本覆盖其他现有文件
  2. 如上面的链接,您可以使用一个读取器和一个写入器,创建一个新文件,并在清除 csv 读取器中的输入时逐行写入,删除原始 csv 并重命名新文件以替换旧文件.

在我看来,选项#2 是非常可取的,因为如果您的脚本在编写过程中出现错误,它可以避免数据丢失的可能性。它还将具有较低的内存使用量。

最后:可以以读/写方式打开文件,并在执行过程中逐行迭代覆盖:但这将使您打开一半的文件有引号,而如果您的脚本中途崩溃,则一半不会通过。


推荐阅读