使用csv.reader比在python中编写自己的解析器有什么好处

时间:2017-01-13 15:03:43

标签: python python-2.7

如果以下两个代码段提供相同的结果,请告诉我使用csv.reader的优势

1)

ch2= SelectKBest(score_func=chi2, k='all').fit_transform(X, Y)
print(ch2.scores_)

2)

import csv
f = open('a.csv', 'rb')
spamreader = csv.reader(f)
for a in spamreader:
    print a

结果:

f = open('a.csv', 'rb')
for a in f:
    print a.split(',')

2 个答案:

答案 0 :(得分:3)

在您的示例中,我看不到使用csv module的优势。但是,当您引用元素时,情况会发生变化:

SNO,Name,Dept
1,Def,Electronics
2,Abc,Computers
3,"here is the delimiter, in quotes",ghi

使用csv模块,它只是

import csv
with open('a.csv', 'rb') as f:
    csv_reader = csv.reader(f, delimiter=',', quotechar='"')
    for row in csv_reader:
        print(row)

但拆分会忽略引号。

(无论如何,我建议使用here所示的pandas来读取CSV文件。请注意,您应该关闭已打开的文件。使用with语句,您可以做到隐含。)

答案 1 :(得分:3)

我澄清了您的问题,因为csv.reader() 迭代器。您的问题将csv模块与编写自己的解析器进行比较。

优点是csv模块实际上实现了CSV格式(包括引号,转义和嵌入换行等),而你编写的天真解析器却没有。因此使用csv模块更正确,实际上也更简单!