如何控制 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])))
我正在使用 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])))