如何控制 csv 文件中非数字条目的引用?

How to control quoting on non-numerical entries in a csv file?

我正在使用 Python3 的 csv 模块,想知道为什么我无法正确控制引用。我正在使用 quoting = csv.QUOTE_NONNUMERIC 选项,但仍然看到所有引用的条目。知道这是为什么吗?

这是我的代码。本质上,我正在读取一个 csv 文件并希望删除所有具有相同文本字符串的重复行:

    import sys
    import csv

    class Row:
        def __init__(self, row):
            self.text, self.a, self.b = row
            self.elements = row


    with open(sys.argv[2], 'w', newline='') as output:

        writer = csv.writer(output, delimiter=';', quotechar='"',
        quoting=csv.QUOTE_NONNUMERIC)

        with open(sys.argv[1]) as input:

            reader = csv.reader(input, delimiter=';')

            header = next(reader)

            Row.labels = header        
            assert Row.labels[1] == 'Label1'

            writer.writerow(header)
            texts = set()

            for row in reader:

                row_object = Row(row)

                if row_object.text not in texts:
                    writer.writerow(row_object.elements)
                    texts.add(row_object.text)

当我查看生成的文件时,内容如下所示:

    "Label1";"Label2";"Label3"
    "AAA";"123";"456"
    ...

但我想要这个:

    "Label1";"Label2";"Label3"
    "AAA";123;456
    ...

好的...我自己想通了。恐怕答案很简单——回想起来也很明显。由于每一行的内容都是从一个csv.reader()中获取的,所以它的元素默认都是字符串。结果,被随后雇用的 csv.writer().

引用

要被视为 int,首先需要将它们转换为 int:

    row_object.elements[1]= int(row_object.a)

可以通过在此转换前后插入类型检查来证明此解释:

    print('Type: {}'.format(type(row_object.elements[1])))