27

I have a folder in Windows 7 which contains multiple .txt files. How would one get every file in said directory as a list?

Seanny123
  • 7,611
  • 11
  • 61
  • 115
rectangletangle
  • 46,943
  • 90
  • 196
  • 270
  • Do you want the list of **files** (not pathnames), e.g. `a.dat b.dat...` not `C:\DIRNAME\SUBDIR\a.dat ....`? – smci May 22 '18 at 00:01
  • Possible duplicate of [How do I list all files of a directory?](https://stackoverflow.com/questions/3207219/how-do-i-list-all-files-of-a-directory) – smci May 22 '18 at 00:05

5 Answers5

25

You can use os.listdir(".") to list the contents of the current directory ("."):

for name in os.listdir("."):
    if name.endswith(".txt"):
        print(name)

If you want the whole list as a Python list, use a list comprehension:

a = [name for name in os.listdir(".") if name.endswith(".txt")]
Greg Hewgill
  • 890,778
  • 177
  • 1,125
  • 1,260
15
import os
import glob

os.chdir('c:/mydir')
files = glob.glob('*.txt')
Hugh Bothwell
  • 53,141
  • 7
  • 81
  • 98
10

All of the answers here don't address the fact that if you pass glob.glob() a Windows path (for example, C:\okay\what\i_guess\), it does not run as expected. Instead, you need to use pathlib:

from pathlib import Path

glob_path = Path(r"C:\okay\what\i_guess")
file_list = [str(pp) for pp in glob_path.glob("**/*.txt")]
Matt
  • 71
  • 1
  • 1
  • 14
Seanny123
  • 7,611
  • 11
  • 61
  • 115
2
import fnmatch
import os

return [file for file in os.listdir('.') if fnmatch.fnmatch(file, '*.txt')]
Satyajit
  • 3,821
  • 1
  • 18
  • 14
1

If you just need the current directory, use os.listdir.

>>> os.listdir('.') # get the files/directories
>>> [os.path.abspath(x) for x in os.listdir('.')] # gets the absolute paths
>>> [x for x in os.listdir('.') if os.path.isfile(x)] # only files
>>> [x for x in os.listdir('.') if x.endswith('.txt')] # files ending in .txt only

You can also use os.walk if you need to recursively get the contents of a directory. Refer to the python documentation for os.walk.

Jonathan Sternberg
  • 6,061
  • 7
  • 38
  • 57