Python - 使用.csv文件

时间:2015-09-03 07:57:51

标签: python file csv numpy

我有一个包含大量数据的.csv文件。 我试着打开它:

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但是我收到以下错误:

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

好的,我用谷歌搜索了它,并在堆栈溢出时发现了以下问题:Trying to use open( filename, 'w' ) gives IOError: [Errno 2] No such file or directory: 所以我从那里尝试了解决方案。 但后来又出现了另一个错误:

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

然后我将我的文件重命名为timestamp.csv,因为我很好奇这个名字可能是一个版本并尝试了我的第一个解决方案。 所以突然找到文件,但作为打印输出我得到以下内容: <_csv.reader object at 0x104c88a60>。我想如果我打印dataFromFile它会显示整个列表。

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

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

我找到了一些解决方法:

for currentRow in dataFromFile:
 print currentRow

因此打印出一行一行。但不完全是我想要的。

最后但并非最不重要的是,我想将我的列表转换为 numpy数组最简单的方法是什么?

修改 我已经为我的上一个问题找到了答案和方法,我猜很容易:

 import numpy as np
 np.array(dataFromFile)

2 个答案:

答案 0 :(得分:2)

  

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

这是错误的假设。

来自Python文档here,csv.reader:

  

返回一个读取器对象,它将迭代给定csvfile中的行。

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

list(dataFromFile)

它会显示您的期望。

编辑:解决您的编辑问题,我认为您正在寻找类似post的内容。从本质上讲,numpy中的genfromtxt()可以帮助您将CSV转换为numpy数组。

P.S。一般来说,如果主题完全不同,你应该问另一个问题 - 保持清洁,让你的问题不再是一个移动的目标

答案 1 :(得分:1)

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

#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()]