Get absolute paths of all files in a directory

PythonAbsolute Path

Python Problem Overview


How do I get the absolute paths of all the files in a directory that could have many sub-folders in Python?

I know os.walk() recursively gives me a list of directories and files, but that doesn't seem to get me what I want.

Python Solutions


Solution 1 - Python

http://docs.python.org/library/os.path.html#os.path.abspath">`os.path.abspath`</a> makes sure a path is absolute. Use the following helper function:

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

Solution 2 - Python

If the argument given to os.walk is absolute, then the root dir names yielded during iteration will also be absolute. So, you only need to join them with the filenames:

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

Solution 3 - Python

If you have Python 3.4 or newer you can use pathlib (or a third-party backport if you have an older Python version):

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

Solution 4 - Python

Try:

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

Solution 5 - Python

You can use os.path.abspath() to turn relative paths into absolute paths:

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

Solution 6 - Python

Starting with python 3.5 the idiomatic solution would be:

import os

def absolute_file_paths(directory):
    path = os.path.abspath(directory)
    return [entry.path for entry in os.scandir(path) if entry.is_file()]

This not just reads nicer but also is faster in many cases. For more details (like ignoring symlinks) see original python docs: https://docs.python.org/3/library/os.html#os.scandir

Solution 7 - Python

All files and folders:

x = [os.path.abspath(os.path.join(directory, p)) for p in os.listdir(directory)]

Images (.jpg | .png):

x = [os.path.abspath(os.path.join(directory, p)) for p in os.listdir(directory) if p.endswith(('jpg', 'png'))]

Solution 8 - Python

from glob import glob


def absolute_file_paths(directory):
    return glob(join(directory, "**"))

Solution 9 - Python

Try:

from pathlib import Path
path = 'Desktop'
files = filter(lambda filepath: filepath.is_file(), Path(path).glob('*'))
for file in files:
   print(file.absolute())

Solution 10 - Python

I wanted to keep the subdirectory details and not the files and wanted only subdirs with one xml file in them. I can do it this way:

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

Solution 11 - Python

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)

Solution 12 - Python

glob library will give you what you need directly:

from glob import glob
list_of_files = glob('your/directory/*')

Solution 13 - Python

Try This

pth=''
types=os.listdir(pth)
for type_ in types:
     file_names=os.listdir(f'{pth}/{type_}')
     file_names=list(map(lambda x:f'{pth}/{type_}/{x}',file_names))
     train_folder+=file_names

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmadCodeView Question on Stackoverflow
Solution 1 - PythonphihagView Answer on Stackoverflow
Solution 2 - PythonwimView Answer on Stackoverflow
Solution 3 - PythonMSeifertView Answer on Stackoverflow
Solution 4 - Pythonthe wolfView Answer on Stackoverflow
Solution 5 - PythonBlenderView Answer on Stackoverflow
Solution 6 - PythonTituszView Answer on Stackoverflow
Solution 7 - Pythonuser3041840View Answer on Stackoverflow
Solution 8 - PythonAmjadHDView Answer on Stackoverflow
Solution 9 - PythonPygirlView Answer on Stackoverflow
Solution 10 - PythonEamonn KennyView Answer on Stackoverflow
Solution 11 - PythonRobert AView Answer on Stackoverflow
Solution 12 - PythonMaiia BocharovaView Answer on Stackoverflow
Solution 13 - PythonTom HuangView Answer on Stackoverflow