2014-07-10 96 views
-2

我在Python 2.7.3工作,并试图读取csv文件PNG_Files_R.csv包含以下信息:名单(),但“海峡”对象不是在python可调用错误

"Group","Sample","T0" \n 
"HereausCPC","61","sample06_1_T0-Subvolume-resample_scale-1_x.png" 

我想除了第一行以外,按单元格逐行读取文件。但我从来没有使用列表()来获得行数,它报告'海峡“对象不是可调用的”

import Image 
import os,csv 
path_working="/media/Research/TEST_Program/PNG_Files" 
path_now=os.getcwd() 
os.chdir(path_working) 
csv_filename='PNG_Files_R.csv' 
f = open('PNG_Files_R.csv', 'rb') 
reader = csv.reader(f) 
rows = list(csv.reader(f)) 
lineNum = len(rows) 
for rowNum in range(1,lineNum): 
    print rows[rowNum][0] 

我重新启动蟒蛇,然后没有错误

感谢很多提前跳出!

+1

你真的需要在问题中正确地设置你的代码格式,特别是如果是空格非常关键的Python。 – TheSoundDefense

+2

这不是完整的相关代码吗? – glglgl

+0

对于格式问题感到抱歉,我确实在每个代码前面放了4个空格,但代码块并不代表它应该如此。请告诉我你是如何编辑它的? – user3817800

回答

5

您可能以前曾将字符串值分配给同一模块中名为list的变量。为变量选择一个不同的名称,问题就会消失。

+0

我的脚本非常简短,只导入,然后是那些代码。也许你的意思是'list(csv.reader(f))'? – user3817800

+0

@ user3817800请编辑该问题以包含错误的完整回溯。 – user4815162342

+0

谢谢,我从这个周末开始使用python,并尝试了很多东西,但忘记清理变量列表。 – user3817800

1

您可能正在使用list作为变量名称。

In [1]: list = "foo" 

In [2]: list(1,2,3) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-2-1860a40b9973> in <module>() 
----> 1 list(1,2,3) 

TypeError: 'str' object is not callable 
2

您可以创建一个阅读器,并通过拨打next()跳过第一行。

csv_filename='PNG_Files_R.csv' 
with open(csv_filename, "rb") as f: 
    reader = csv.reader(f) 
    reader.next() 
    for row in reader: 
     print row[0] 

如果你真的想要得到的所有行到值列表:

csv_filename='PNG_Files_R.csv' 
with open(csv_filename, "rb") as f: 
    reader = csv.reader(f) 
    reader.next() 
    rows = list(reader) 

然后你就可以通过索引访问记录,如rows[3](如果有这么多的记录)。

这个解决方案是无论如何,假设你没有在你以前的代码中重新定义list,它应该从 csv文件中收集所有记录,忽略第一个标题行。

+0

感谢迭代器是非常好的方法,但是我需要稍后调用一些特定的行。 – user3817800

+0

@ user3817800添加修改,其中提供了所有行的列表。 –

+0

这是更优雅和有效的,谢谢你的更新,我会用它。但我在这个脚本之前重新定义了'list'。 – user3817800

相关问题