Python:あるパスの下にあるすべてのファイルとフォルダを遍歴出力する
どのようにして、あるパスの下のすべての質問とフォルダを出力しますか?
この問題は、「ノードを指定し、このノードをルートノードとするこのツリーのすべてのサブノードを出力する」と同じです.
再帰は実現できる.
リーフノード(ファイル)であれば、このリーフノードの名前を出力し、返します.
そうでなければ、このノードの名前(フォルダ)を出力し、このノードを再びルートノードとして出力し、そのすべてのサブノードを遍歴します.
注意しなければならないのはosです.Listdir()この関数は、パスの下にあるすべてのファイル名のみを返します(これらのファイル名にはパスが含まれていません)......
だから絶対パスを書きます.OSを使ってもいいです.path.joinという関数.
In [1]: import os In [2]: os.path.join('a','b') Out[2]: 'a\\b'
OSを呼び出すこともできます.walkという関数.
戻ってくるのは3元tupple(dirpath,dirnames,filenames)で、1つ目は開始パス、2つ目は開始パスの下のフォルダ、3つ目は開始パスの下のファイルです.dirpathはstringであり、ディレクトリを表すパスであり、dirnamesはlistであり、dirpathの下のすべてのサブディレクトリの名前を含み、filenamesはlistであり、非ディレクトリファイルの名前を含み、これらの名前にはパス情報は含まれていない.全経路を得る必要がある場合はosを使用する必要がある.path.join(dirpath, name).
この問題は、「ノードを指定し、このノードをルートノードとするこのツリーのすべてのサブノードを出力する」と同じです.
再帰は実現できる.
リーフノード(ファイル)であれば、このリーフノードの名前を出力し、返します.
そうでなければ、このノードの名前(フォルダ)を出力し、このノードを再びルートノードとして出力し、そのすべてのサブノードを遍歴します.
# -*- coding: utf-8 -*-
"""
Created on 2017 11 11 13:19:20
@author: qcy
"""
import os
def traverse(f):
fs = os.listdir(f)
for f1 in fs:
tmp_path = os.path.join(f,f1)
if not os.path.isdir(tmp_path):
print(' : %s'%tmp_path)
else:
print(' :%s'%tmp_path)
traverse(tmp_path)
path = 'F:/source_files/python/'
traverse(path)
注意しなければならないのはosです.Listdir()この関数は、パスの下にあるすべてのファイル名のみを返します(これらのファイル名にはパスが含まれていません)......
だから絶対パスを書きます.OSを使ってもいいです.path.joinという関数.
In [1]: import os In [2]: os.path.join('a','b') Out[2]: 'a\\b'
OSを呼び出すこともできます.walkという関数.
import os
path = 'F:/source_files/python/'
for fpathe,dirs,fs in os.walk(path):
for f in fs:
print(os.path.join(fpathe,f))
戻ってくるのは3元tupple(dirpath,dirnames,filenames)で、1つ目は開始パス、2つ目は開始パスの下のフォルダ、3つ目は開始パスの下のファイルです.dirpathはstringであり、ディレクトリを表すパスであり、dirnamesはlistであり、dirpathの下のすべてのサブディレクトリの名前を含み、filenamesはlistであり、非ディレクトリファイルの名前を含み、これらの名前にはパス情報は含まれていない.全経路を得る必要がある場合はosを使用する必要がある.path.join(dirpath, name).