采用以下代码:
import csv
# import items with first row
inputfile = open('price.csv', 'r')
reader = csv.reader(inputfile)
rows1 = [row for row in reader] # here
# del first row
rows2 = rows1[1:]
print(rows2)
更改
rows1 = [row for row in reader]
进入
rows1 = [row for row in inputfile]
更改输出:
# with 'reader'
[['6004', '240'], ['6004', '350'], ['6004', '350']]
# with 'inputfile'
['6004,240\n', '6004,350\n', '6004,350\n']
是什么原因造成的?或者说,原理是什么?
答案 0 :(得分:6)
file
对象是可迭代的。在file
对象inputfile
上进行迭代,将原始(未解析的)行作为字符串对象返回。
您构造了一个csv.reader
对象,可以解析这些行。 csv.reader
对象也是可迭代的,并且对其进行迭代将返回单个CSV记录的字符串列表。
因此,在inputfile
上进行循环时与在reader
上进行循环时,得到的结果不同。
答案 1 :(得分:1)
当您通过迭代或使用readline
/ readlines
之类的函数读取行时,Python不会剥离换行符。如果所有行都以换行符结尾,则可以手动将其剥离。
另一件事是,csv.reader
从文件对象中读取行并创建列表的迭代器,其中每个列表包含在,
或您设置的任何分隔符上分割的行的值,考虑到报价和其他细微差别。
因此,以您的示例为例,您可以执行以下操作:
[row[:-1].split(',') for row in inputfile]
答案 2 :(得分:0)
您需要在遍历文件对象inputfile时显式删除空格
rows1=[row.strip() for row in inputfile]