繁体   English   中英

'_csv.reader' 类型的对象没有 len(),无法识别 csv 数据

[英]object of type '_csv.reader' has no len(), csv data not recognized

以下是一个独立的示例。 更改“folder_name”以运行它。 这回答:

reader type = _csv.reader
list(reader) = []
_csv.reader' has no len()

我已经尝试了很多东西,但仍然无法访问数据,尽管它在文件中。 任何帮助将非常受欢迎。 伯尔尼

################  INPUTS  ################
folder_name = '/Users/Shared/TS1/Historiques Dividendes/'
path_to_inter_file = folder_name + 'interm.csv'

################  End INPUTS  ################
################  MAIN  ################
## --- Creates "inter" file after removing previous one if existed
if os.access(path_to_inter_file, os.W_OK) == True:
    os.remove(path_to_inter_file)
if os.access(path_to_inter_file, os.W_OK) == False:
    finter = open(path_to_inter_file,'w')

## --- Gets data from an URL
URL = "<http://chart.finance.yahoo.com/table.csv?s=XLB&a=0&b=24&c=1980&d=0&e=24&f=2040&g=v&ignore=.csv'>"
data = requests.get(URL)

## --- Loads data into "inter" file
finter.write(data.text)
finter.close

## --- Reopens "inter" file to read data
finter = open(path_to_inter_file,'r')
mreader = csv.reader(finter,delimiter=',')
print type(mreader)
list(mreader)
print list(mreader)
len(mreader)

## --- Closes "inter" file and removes it
finter.close()
os.remove(path_to_inter_file)

################  End MAIN  ################

mreader是一个迭代器。 它没有len。

但是你之前将它消耗到列表中,所以你可以这样做:

mreader = list(mreader)

迭代器转换为实际的行列表,现在有一个len

finter.closefinter.close什么都不做。 使用finter.close()with context块自动处理。

mreader列表是内存昂贵的操作。

我宁愿简单地这样做:

c = 0
with open(path_to_inter_file, 'r') as f:
    reader = csv.reader(f, delimiter=';')
    for i, row in enumerate(reader):
        c += 1
print(c)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM