Получить абсолютный путь к файлам в подкаталоге - PullRequest
0 голосов
/ 28 мая 2020

У меня есть каталог, состоящий из других каталогов. В каждом из этих подкаталогов есть файлы, для которых мне нужен абсолютный путь. Например, предположим, что родительский каталог - / home / Documents, а каждый из подкаталогов - 1, 2, ..., 10. Я пробовал что-то вроде files = [os.path.abspath(f) for d in os.listdir('/home/Documents') for f in os.listdir(d)], но это дает мне что-то вроде (для файла ) /home/Documents/file1, тогда как должно быть /home/Documents/1/file1. Есть ли способ сделать это с помощью вложенного каталога?

Ответы [ 3 ]

1 голос
/ 28 мая 2020

Используйте os.path.join :

root = '/tmp/project'
files = [os.path.join(root, d, f) for d in os.listdir(root) for f in os.listdir(os.path.join(root, d))]
print files

Вывод:

['/tmp/project/auth/__init__.py', '/tmp/project/controllers/__init__.py']
0 голосов
/ 28 мая 2020

Да. Вы можете попробовать os.walk. Рассмотрим следующий путь, который имеет 3 подкаталога: «1», «2», «3».
- «1» содержит файл («123.txt») - «2» пусто - «3» содержит 2 файла («123.txt», «1234.txt»)

path = r"C:\Users\hvasala\Documents\Udemy Course\project\del"
import os
for dirname, _, filenames in os.walk(path):
    for filename in filenames:
        print(os.path.join(dirname, filename))

Вывод:
C: \ Users \ hvasala \ Documents \ Udemy Course \ project \ del \ 1 \ 123.txt
C: \ Users \ hvasala \ Documents \ Udemy Course \ project \ del \ 3 \ 123.txt
C: \ Users \ hvasala \ Documents \ Udemy Course \ project \ del \ 3 \ 1234.txt

0 голосов
/ 28 мая 2020

Попробуйте следующий код:

import os

def find_file_name(path=None):
    paths = []
    if not path:
        path = os.getcwd()
    for element in os.listdir(path):
        full_path = os.path.join(path, element)        
        if os.path.isdir(full_path):
            paths += find_file_name(path=full_path)
        else:
            paths.append(full_path)            
    else:        
        return paths
...