关于Python:Python – 使用.csv文件

Python - working with .csv-files

我有一个.csv文件,里面有很多数据。我试着打开它:

1
2
3
4
5
6
import csv

filename = raw_input('Your filename: ')
with open(filename,'r') as myFile:
  dataFromFile = csv.reader(myFile)
  print dataFromFile

据我所知,csv.reader将文件中的数据转换成一个列表。

我想打开文件2015-09-02_17:59:43.csv但是我得到以下错误:

1
IOError: [Errno 2] No such file or directory: '2015-09-02_17:59:43.csv '

好的,我在google上找到了关于堆栈溢出的以下问题:试图使用open(文件名'w')会产生ioerror:[errno 2]没有这样的文件或目录:所以我从那里尝试了解决方案。但后来我又犯了一个错误:

1
OSError: [Errno 2] No such file or directory: ''

然后我将文件重命名为timestamp.csv,因为我很好奇这个名称是否是一个issus,并尝试了我的第一个解决方案。突然间,文件被找到了,但作为打印输出,我得到了以下信息:<_csv.reader object at 0x104c88a60>。我想,如果我把dataFromFile打印出来,它会显示出整个列表。

所以这里的第一个问题是:这个<_csv.reader object at 0x104c88a60>是否意味着列表需要长时间显示,所以它只告诉我我有什么对象?

第二个问题:为什么我以前没有尝试解决工作?

我找到了一个解决方法:

1
2
for currentRow in dataFromFile:
 print currentRow

所以一行接一行打印出来。但不完全是我想要的。

最后但并非最不重要的是,我想把我的列表转换成一个麻木的数组,最简单的方法是什么?

编辑我已经找到了最后一个问题的答案和方法,我想这很容易:

1
2
 import numpy as np
 np.array(dataFromFile)


As far as I know csv.reader converts the data from the file into a
list.

这是错误的假设。

从这里的python文档csv.reader:

Return a reader object which will iterate over lines in the given csvfile.

它是一个迭代器,而不是一个列表。因此,您得到一个csv.reader对象。如果你这样做了

1
list(dataFromFile)

它将显示您所期望的。

编辑:写下你的编辑,我想你正在从这篇文章中寻找类似的东西。从本质上讲,numpy中的genfromtxt()完成了将csv转换为numpy数组的过程。

总的来说,如果话题完全不同,你应该问另一个问题——保持话题的整洁,使你的问题不再是一个移动的目标。


csv.reader函数不返回列表,它返回一个迭代器对象,可用于逐行获取。如果你想得到一个行列表,就这样做:

1
2
3
4
#get list of lines
lines = open("your file").readlines()
#if you want to get the list with the values of each line separated by ',' you can do it like this:
lines2 = [line.split(',') for line in open("your file").readlines()]