我需要编辑 python 脚本以从 csv 中删除引号,然后写回同一个 csv 文件,删除引号

I need to edit a python script to remove quotes from a csv, then write back to that same csv file, quotes removed

我看过类似的帖子,但它们似乎都是打印语句(查看清理后的数据)而不是用清理后的数据覆盖原始 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 的帮助将不胜感激,谢谢!

看这里:Python CSV: Remove quotes from value

根据 csv 的大小,我基本上使用了两种不同的方法。

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

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

最后:可能 可以将文件打开为 read/write,并在进行时逐行迭代覆盖:但这会让您保持打开状态如果您的脚本中途崩溃,一半的文件有引号,一半没有。

你可以这样做。读入,并使用引号=csv.QUOTE_NONE

写入
import csv
f = open("bank.csv", 'r')
inputCSV = []
try:
    for row in csv.reader(f, delimiter=';', skipinitialspace=True):
        inputCSV.append(row)
finally:
        f.close()

with open('bank.csv', 'w', newline='') as csvfile:
    csvwriter = csv.writer(csvfile, delimiter=';')
    for row in inputCSV:
        csvwriter.writerow(row)