当我做一个简单的for循环时,我有一个输出它的变量:
for filex in variable:
print filex
# OUTPUT #
'proj1' (objectName 0x2267c4f0)
'proj2' (objectName 0x2267a770)
'proj3' (objectName 0x22679690)
'proj4' (objectName 0x2267d0d0)
# OUTPUT #
我只想在' proj1'等引号之间提取文字。但是在使用索引时出现了这个错误:
for filex in variable:
print filex[0]
# OUTPUT #
File "<string>", line 11, in <module>
TypeError: 'objectName' object does not support indexing
# OUTPUT #
*我在主机应用程序中使用python。
答案 0 :(得分:2)
似乎import csv
from collections import Counter
# define a generator, that will yield you field after field
# ignoring newlines:
def iter_fields(filename):
with open(filename, 'rb') as f:
reader = csv.reader(f)
for row in reader:
for field in row:
yield field
# now use collections.Counter to count your values:
counts = Counter(iter_fields('stackoverflow.csv'))
print counts
# output:
# Counter({'item3': 2, 'item2': 2, 'item1': 1,
# ' item1': 1, ' item2': 1, 'item4': 1})
是自定义类的一个对象,它没有实现filex
方法。
当你这样做时:
__getitem__
实际调用的是:
filex[0]
输出字符串filex.__getitem__(0)
可能是"'proj1' (objectName 0x2267c4f0)"
或filex.__str__
的返回值。
如果是这样,您正在寻找的filex.__repr__
字符串可以从'proj1'
其他属性或方法中找到。
除此之外,您可以通过解析filex
的返回值来破解您的方式,但这并不是非常强大,IMO。
答案 1 :(得分:1)
我建议你找出你想要的那个属性的名字,
例如如果是name
,那么您可以直接使用存储filex.name
的{{1}}来访问它
如果您不知道该属性是什么,可以使用'proj1'
查看所有属性