web-dev-qa-db-ja.com

ディレクトリ内のすべてのファイルの絶対パスを取得する

Pythonで多くのサブフォルダーを持つことができるディレクトリ内のすべてのファイルの絶対パスを取得するにはどうすればよいですか?

私はos.walk()が再帰的にディレクトリとファイルのリストを提供することを知っていますが、それは私が望むものを手に入れないようです。

46
madCode

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))
52
phihag

引数が 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))
15
wim

試してください:

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
9
the wolf

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)))
7
Blender

Python 3.4以降を使用している場合、 pathlib を使用できます(または、古いPythonバージョン):

import pathlib
for filepath in pathlib.Path(directory).glob('**/*'):
    print(filepath.absolute())
6
MSeifert
from glob import glob


def absolute_file_paths(directory):
    return glob(join(directory, "**"))
0
AmjadHD
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)
0
Robert A

ファイルではなくサブディレクトリの詳細を保持し、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
0
Eamonn Kenny