0

i have directory path/to/dir that contains 10 subdirectories. there files in all of the subdirectories. I want to append these files in every subdirectory into a unique list. How can I do this?

Mo.be
  • 95
  • 2
  • 11
  • Does this answer your question? [How do I list all files of a directory?](https://stackoverflow.com/questions/3207219/how-do-i-list-all-files-of-a-directory) – Faraaz Kurawle Mar 23 '22 at 09:38

3 Answers3

3

What i understood is you just wanted to list all the filenames from a particular directory and its sub-directory.

list1=[] #Empty list

for root, dirs, files in os.walk(fr"path\\to\\directory", topdown=False): 
#Listing Directory
    for name in files:
        a=os.path.join(root, name)
        print(a)
        list1.append(a)
Faraaz Kurawle
  • 1,085
  • 6
  • 24
2
import os
path="C://Users//<user_name>//Desktop"
obj = os.scandir()
print("Files and Directories in '% s':" % path)
for entry in obj:
    if entry.is_dir() or entry.is_file():
        print(entry.name)

For listing whole directory:

import os
def list_dirs(path):
  obj = os.scandir(path)
  for entry in obj:
      if entry.is_dir():
        print(1,entry.path)
        list_dirs(entry)
      elif entry.is_file():
        print(2,entry.name)
      else:
        break
list_dirs(path)

It basically use's os.scandir method which provides both speed and more benefit like file meta data ect, with recursion to obtain list of whole directory.

also a list comprehension method for @FaraazKurawle 's answer:

def list_dir(path):
  path=fr"{path}"
  list_1=[os.path.join(root, name) for root, dirs, files in os.walk(path, topdown=False) for name in files]
  return list_1

some helpful links:

  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Jan 22 '22 at 15:32
1
import glob
path = '\\path\\to\\dir\\'
files = [f for f in glob.glob(path + "**/*", recursive=True)]
DDaly
  • 474
  • 2
  • 6