См. iter () и Типы итераторов
for a in something:
pass
Если тип something
является итерируемым, a
примет все значения вашегоповторяем по очереди.То, чем в точности становится a
, скрыто внутри реализации __iter__(self):
объекта, который вы перебираете (afaik).
- Если вы итерируете по
list
, он представляет вам все значения по очереди. - Если вы итерируете по
dict
, он предоставляет вам все dict.keys()
по очереди. - Если вы выполните итерацию по
string
, он будет представлять вам каждый символ по очереди.
Генераторы и последовательности также обеспечивают итерацию, см. Понимание генераторов в Python и Типы последовательностей
Если вы перебираете файл, вы будете получать (текстовый, а не двоичный) его построчно, если только вы не вызовете другие методы вфайл первый ():
Демоданные:
with open("f.txt","w") as f:
f.write("""Some Text
Some text after a newline.
More text in a new line.""")
Повторение файла с использованием его в качестве итерируемого:
with open("f.txt","r") as r:
for c in r: # returns each single line including \n (thats the way next() of file works
print (c) # appends another \n due to default end='\n'
print("-"*30)
Вывод:
Some Text
Some text after a newline.
More text in a new line.
------------------------------
Итерация по file.read ():
with open("f.txt","r") as r:
t = r.read() # returns a single string of the whole files content
for c in t: # you iterate characterwise over a string!
print (c)
print("-"*30)
Вывод:
S
o
m
e
[... snipped ...]
l
i
n
e
.
------------------------------
Итерация по файлу с использованием readline ():
with open("f.txt","r") as r:
for c in r.readline(): # returns only the first line as string and iterates over this string
print (c) # the other lines are omitted!
print("-"*30)
Вывод:
S
o
m
e
T
e
x
t
------------------------------
Итерация по файлу с использованием readlines ():
with open("f.txt","r") as r:
for c in r.readlines(): # returns a list of strings
print (c) # appends another \n due to default end='\n'
print("-"*30)
Вывод:
Some Text
Some text after a newline.
More text in a new line.
------------------------------
Итерация по двоичному файлу:
with open("f.bin","wb") as f:
f.write(b"294827523")
f.write(b"2927523")
f.write(b"-27523")
f.write(b"\n-27523")
with open("f.bin","rb") as r:
for b in r:
print (b)
Вывод:
b'2948275232927523-27523\n'
b'-27523'