簡體   English   中英

如何遞歸遍歷所有子目錄和讀取文件?

[英]How to recursively go through all subdirectories and read files?

我有一個root-ish目錄,其中包含多個子目錄,所有子目錄都包含文件名data.txt。 我想要做的是編寫一個接收“root”目錄的腳本,然后讀取所有子目錄並讀取子目錄中的每個“data.txt”,然后將每個data.txt文件中的內容寫入輸出文件。

這是我的代碼片段:

import os
import sys
rootdir = sys.argv[1]

with open('output.txt','w') as fout:
    for root, subFolders, files in os.walk(rootdir):
        for file in files:
            if (file == 'data.txt'):
                #print file
                with open(file,'r') as fin:
                    for lines in fin:
                        dosomething()

我的dosomething()部分 - 如果我只為一個文件運行該部分,我已經測試並確認它可以正常工作。 我還確認,如果我告訴它打印文件(注釋掉的行),腳本會輸出'data.txt'。

現在,如果我運行它,Python會給我這個錯誤:

File "recursive.py", line 11, in <module>
    with open(file,'r') as fin:
IOError: [Errno 2] No such file or directory: 'data.txt'

我不確定為什么它找不到它 - 畢竟,如果我取消注釋'print file'行,它會打印出data.txt。 我做錯了什么?

您需要使用絕對路徑,您的file變量只是一個沒有目錄路徑的本地文件名。 root變量是該路徑:

with open('output.txt','w') as fout:
    for root, subFolders, files in os.walk(rootdir):
        if 'data.txt' in files:
            with open(os.path.join(root, 'data.txt'), 'r') as fin:
                for lines in fin:
                    dosomething()
[os.path.join(dirpath, filename) for dirpath, dirnames, filenames in os.walk(rootdir) 
                                 for filename in filenames]

獲得樹的功能方法看起來更短,更干凈,更Pythonic。

您可以將os.path.join(dirpath, filename)包裝到任何函數中以處理您獲得的文件或保存路徑數組以進行進一步處理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM