Python 使用with結構打開多個文件


原文:https://www.cnblogs.com/dancesir/p/7804989.html

考慮如下的案例: 
同時打開三個文件,文件行數一樣,要求實現每個文件依次讀取一行,然后輸出,我們先來看比較容易想到的寫法:

復制代碼
with open(filename1, 'rb') as fp1:
    with open(filename2, 'rb') as fp2:
        with open(filename3, 'rb') as fp3:
            for i in fp1:
                j = fp2.readline()
                k = fp3.readline()
                print(i, j, k)
復制代碼

注意這里只能對單個文件進行for循環讀取,不能寫成:

for i, j, k in fp1, fp2, fp3:
    print(i, j, k)

但可使用強大的zip操作:

for i, j, k in zip(fp1, fp2, fp3):
    print(i, j, k)

這樣層層的嵌套未免啰嗦,with結構支持一種更簡潔的寫法:

with open(filename1, 'rb') as fp1, open(filename2, 'rb') as fp2, open(filename3, 'rb') as fp3:
    for i in fp1:
        j = fp2.readline()
        k = fp3.readline()
        print(i, j, k)

或者使用更為優雅的寫法,此時需要contextlib語法糖:

from contextlib improt ExitStack
with ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in [filename1, filename2, filename3]]
    for i, j, k in zip(files[0], files[1], files[2]):
        print(i, j, k)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM