[英]Using two loops of itertools
我正在嘗試運行itertools的兩個循環,但出現錯誤。 這是我的代碼:
import itertools
with open('lognew.txt', 'r') as f:
firstlines = itertools.islice(f, 0, None, 1)
secondlines = itertools.islice(f, 0, None, 2)
for (line1 in firstlines) and (line2 in secondlines):
print line1 + line2
我收到此錯誤:
File "C:\Users\abhi\Desktop\logedit.py", line 15
for (line1 in firstlines) and (line2 in secondlines):
^
SyntaxError: invalid syntax
我想要這樣的結果:
<first line in firstlines> is meaning of <first line in secondlines>
<second line in firstlines> is meaning of <second line in secondlines>
<third line in firstlines> is meaning of <third line in secondlines>
讀取文件沒有錯誤,因為以下代碼成功打印了行。
for line1 in firstlines :
print line1
for line2 in secondlines :
print line2
非常感謝您的幫助。
您的切片將無法執行您認為會執行的操作。 第一個切片只給您第一行,第二個切片給您第二行 ,前提是您在第一個切片之后對其進行了迭代。 那是因為輸入文件已經前進了一行,所以第二個切片對象將在迭代時跳過其中一個,為您提供下一個。 如果壓縮了文件,則需要第1行,第3行,第4行,第6行,依此類推。
您真正想要的是成對線路循環。 為此,您根本不需要使用切片。 使用itertools.izip()
; 它將每兩行壓縮在一起:
from itertools import izip
with open('lognew.txt', 'r') as f:
for line1, line2 in izip(f, f):
print line1.rstrip('\n') + line2
每次迭代時, izip()
都會從第一個參數(打開文件對象f
)獲取一個值,然后從第二個參數( 也打開文件對象f
)獲取一個值。 由於文件對象每次迭代都前進到下一行,因此以上內容有效地為您提供了文件中成對的行。
請注意,如果文件的行數為奇數,則看不到最后一行。 如果需要訪問最后一行,請改用itertools.izip_longest()
:
from itertools import izip_longest
with open('lognew.txt', 'r') as f:
for line1, line2 in izip_longest(f, f, fillvalue='\n'):
print line1.rstrip('\n') + line2
如果行數為奇數,它將添加一個空行( fillvalue='\\n'
)。
在Python 3中, itertools.izip()
取代了內置的zip()
函數,並且itertools.izip_longest()
已重命名為itertools.zip_longest()
。
for line1, line2 in itertools.izip(f1, f2):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.