以下は、Python 3 でフォルダーを走査して特定のファイル名を抽出する例です。これは非常に参考になり、皆さんの役に立つことを願っています。一緒に見てみましょう
ファイルをバッチで処理する場合、多くの場合、特定の条件下でファイル名を抽出するために特定のパスをたどる必要があります。この記事は、非常に簡潔ですが、非常に暴力的な方法を書いています。
例の目的は次のとおりです: リモートセンシングデータが保存されているフォルダーの下にある、名前が「_BAD」で終わるフォルダーの内容を取得します。このファイルは階層(年/月/品種/)が多く、対象フォルダも多く、しかも最終階層に存在するため、手動で確認するのは非常に面倒です。
コードは次のとおりです (知識ポイントを要約した後):
# -*- coding: utf-8 -*- """ 遍历某路径下所有文件夹,获得特定文件夹下所有文件 很暴力,真的遍历了所有的文件夹 20180124 @author: 墨大宝 """ import os TARGETPATH = r'F:\MODIS_DATA' records = [] for currentDir, _, includedFiles in os.walk(TARGETPATH): if not currentDir.endswith('_BAD'): continue else: records.append(currentDir) # 将以“_BAD”结尾的文件夹名加入records records.extend(includedFiles) # 将该文件夹内的文件名列表扩展到records # 将records写入.txt txtFile = open(os.path.join(TARGETPATH, '02_04_BAD.txt'), 'w') txtFile.write(os.linesep.join(records)) txtFile.close() # 将排序后的records写入.txt with open(os.path.join(TARGETPATH, '02_04_BAD_SORTED.txt'), 'w') as txtFile: txtFile.write('\n'.join(sorted(records)))
os.walk() は、ディレクトリ ツリー ジェネレーターを返します。 (dirpath, dirnames, filenames) 形式のタプルが生成されるたびに、要素はカレントパス、カレントパス配下のフォルダリスト、カレントパス配下のファイル名リストとなります。
List の .append()、.extend()、および .sort() メソッドはすべてその場で変更されますが、sorted() 関数は変更されません。
リストを .txt ファイルに書き込むときは、リストを str に変換する必要があります。str() 関数を直接使用して変換を強制すると、リストの各要素を接続するのに改行を使用した方が見栄えが良くなります。
os.path はシステムの改行文字を表します。Windows では「rn」、他のシステムでは「n」です。ただし、os.path を使用してリスト要素を接続し、最終的に Windows メモ帳で開いた場合、改行は同じになります。ただし、vs code で開くと、os.path が変更されます。これは、Python の書き込みメカニズムに関連している可能性があるため、当面は掘り下げません。 )。
ファイルの読み取りと書き込みに関しては、ほとんどの情報が with as 形式を推奨していますが、これは確かにより簡潔です。
追記:
os.walk() は、ディレクトリツリーに従って指定されたパス内のすべてのフォルダーとファイルを実際に走査するため、暴力的であると言われていますが、ファイルの量は多いですが、ファイル名は異なります。再帰関数を作成するのに os.listdir() を使用すると、実行効率が高くなる可能性がありますが、ロジックは遅くなります。の os.walk() はシンプルで書きやすいので、気軽にやってみました。
関連する推奨事項: 空ではないフォルダーを削除する Python インスタンス
プログラム実行ファイルのパスを取得する Python メソッド
以上がPython3. フォルダーを走査して特定のファイル名を抽出する例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。