Pythonで多くのサブフォルダーを持つことができるディレクトリ内のすべてのファイルの絶対パスを取得するにはどうすればよいですか?
私はos.walk()
が再帰的にディレクトリとファイルのリストを提供することを知っていますが、それは私が望むものを手に入れないようです。
os.path.abspath
は、パスが絶対パスであることを確認します。次のヘルパー関数を使用します。
import os
def absoluteFilePaths(directory):
for dirpath,_,filenames in os.walk(directory):
for f in filenames:
yield os.path.abspath(os.path.join(dirpath, f))
引数が os.walk
は絶対値であり、反復中に生成されるルートディレクトリ名も絶対値になります。したがって、ファイル名でそれらを結合するだけです:
import os
for root, dirs, files in os.walk(os.path.abspath("../path/to/dir/")):
for file in files:
print(os.path.join(root, file))
試してください:
import os
for root, dirs, files in os.walk('.'):
for file in files:
p=os.path.join(root,file)
print p
print os.path.abspath(p)
print
os.path.abspath()
を使用して、相対パスを絶対パスに変換できます。
file_paths = []
for folder, subs, files in os.walk(rootdir):
for filename in files:
file_paths.append(os.path.abspath(os.path.join(folder, filename)))
Python 3.4以降を使用している場合、 pathlib
を使用できます(または、古いPythonバージョン):
import pathlib
for filepath in pathlib.Path(directory).glob('**/*'):
print(filepath.absolute())
from glob import glob
def absolute_file_paths(directory):
return glob(join(directory, "**"))
for root, directories, filenames in os.walk(directory):
for directory in directories:
print os.path.join(root, directory)
for filename in filenames:
if filename.endswith(".JPG"):
print filename
print os.path.join(root,filename)
ファイルではなくサブディレクトリの詳細を保持し、1つのxmlファイルを含むサブディレクトリのみが必要でした。私はこの方法でそれを行うことができます:
for rootDirectory, subDirectories, files in os.walk(eventDirectory):
for subDirectory in subDirectories:
absSubDir = os.path.join(rootDirectory, subDirectory)
if len(glob.glob(os.path.join(absSubDir, "*.xml"))) == 1:
print "Parsing information in " + absSubDir