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

时间:2015-07-18 11:41:38

标签: csv python-3.x quoting

我正在使用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
    ...

1 个答案:

答案 0 :(得分:0)

好的......我自己弄清楚了。我担心的答案相当简单 - 回想起来很明显。由于每行的内容是从csv.reader()获得的,因此默认情况下其元素是字符串。结果,后来使用的csv.writer()引用了get。

要被视为int,首先需要将其转换为int

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

可以通过在此演员表之前和之后插入类型检查来证明此解释:

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