python中open是可迭代物件但是不是迭代器

2021-09-29 19:49:16 字數 2484 閱讀 9390

在使用progressbar列印進度條時,發現open(『a.txt』)不能列印進度條

網上demo

import time

import progressbar

bar = progressbar.progressbar(widgets=

[' ['

, progressbar.timer(),

'] '

, progressbar.percentage(),

' ('

, progressbar.eta(),

') ',]

)for i in bar(

range

(1000))

: time.sleep(

0.01

)

完美執行

我的test

import time

import progressbar

bar = progressbar.progressbar(widgets=

[' ['

, progressbar.timer(),

'] '

, progressbar.percentage(),

' ('

, progressbar.eta(),

') ',]

)for i in bar(

open

('a.txt'))

: time.sleep(

0.01

)

崩了,而且沒看懂

發現python有三種可迭代的東西: 生成器、迭代器和可迭代物件

# 判斷是不是可以迭代,用iterable

# 判斷是不是迭代器,用iterator

from collections import iterable,iterator #我們需要用到的模組 s=

'hello'l=[

1,2,

3]t=(

1,2,

3)d=set1=

f=open

('a.txt'

)# #都是可迭代的

s.__iter__(

)#都有__iter__方法

l.__iter__(

)t.__iter__(

)d.__iter__(

)set1.__iter__(

)f.__iter__(

)#python官方推薦 判斷方式

#  是否是可以迭代的

print

(isinstance

(s,iterable)

)print

(isinstance

(l,iterable)

)print

(isinstance

(t,iterable)

)print

(isinstance

(d,iterable)

)print

(isinstance

(set1,iterable)

)print

(isinstance

(f,iterable)

)#  是否是迭代器,用iterator

print

(isinstance

(s,iterator)

)print

(isinstance

(l,iterator)

)print

(isinstance

(t,iterator)

)print

(isinstance

(d,iterator)

)print

(isinstance

(set1,iterator)

)print

(isinstance

(f,iterator)

)# 有沒有len方法

s.__len__(

)#都有__iter__方法

f.len() 位於**第41行

由輸出知open是乙個可迭代物件,但是不是迭代器,沒有__len__方法,沒法知道總的長度,跑進度條失敗,極有可能就是這點不同。

如果事先把檔案遍歷一遍,求出總行數,也不值得,檔案太大,罷了,就不對open用progressbar了。

python可迭代 python中可迭代物件有哪些

python中的可迭代物件有哪些?python中的可迭代物件有 列表 元組 字典 字串 常結合for迴圈使用 判斷乙個物件是不是可迭代物件 from collections import iterable isinstance list range 100 iterable isinstance s...

python中 可迭代物件

迭代是訪問集合元素的 種 式。迭代器是 個可以記住遍歷的位置的物件。迭代器物件從集合的第 個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。我們已經知道可以對list tuple str等型別的資料使 for in 的迴圈語法從 其中依次拿到資料進 使 我們把這樣的過程稱為遍歷,也...

python中可迭代物件反轉

1 字串反轉 a 839574 reversed a object at 0x00000215caca0d60 for i in reversed a reversed反轉為迭代器物件 print i,end 4 7 5 9 3 8 a 839574 a.reverse 字串不能都就地反轉 trac...