从csv文件导入数据为什么他们打印不同的东西?

2024-03-29 00:23:56 发布

您现在位置:Python中文网/ 问答频道 /正文

采用以下代码:

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']

是什么引起的?或者说,原则是什么?你知道吗


Tags: csv代码inimportforwithitemsopen
3条回答

当您通过迭代或使用readline/readlines之类的函数来读取行时,Python不会去掉换行符。如果所有行都以换行结束,可以手动将其剥离。你知道吗

另一件事是,csv.reader从file对象中读取行,并创建一个列表迭代器,其中每个列表包含在,上分割的行的值或您设置的任何分隔符,同时考虑到引号和其他细微差别。你知道吗

例如,要获得类似的行为,可以执行以下操作:

[row[:-1].split(',') for row in inputfile]

file对象是iterable。迭代file对象inputfile返回原始(未分析)行作为字符串对象。你知道吗

您可以构造一个csv.reader对象来解析这些行。csv.reader对象也是iterable,遍历它会返回单个CSV记录的字符串列表。你知道吗

因此,在inputfile上循环时得到的结果与在reader上循环时得到的结果不同。你知道吗

在迭代文件对象inputfile时,需要显式去除空白

rows1=[row.strip() for row in inputfile]

相关问题 更多 >