Как я могу cconcatenate набор текстовых файлов между корневым каталогом и целевым каталогом - PullRequest
0 голосов
/ 29 марта 2019

Я пишу скрипт на Python, целью которого является обход структуры каталогов, где каждый каталог имеет один текстовый файл и

  1. Выберите файл в каталоге с произвольными 'n' каталогами ниже от root
  2. Объединить весь текст из файлов из целевого каталога в корневой каталог в одном файле
  3. Используйте say -f script.txt -o greetings.aiff, чтобы преобразовать текстовый файл и экспортировать его в формат aiff
  4. Используйте lame -m m greetings.aiff greetings.mp3, чтобы преобразовать его в более удобный формат

Почему это? Как бы странно это ни звучало, создавать пользовательское обучающее аудио, которое пересекает структуру знаний (структуру каталогов) и охватывает различные ее части каждый день.

Я думаю, что все будет в порядке на шагах 3 и 4. Однако мне сложно определить случайные файлы в каталогах n ниже root.

Основываясь на ответах в других местах, я вижу, что я могу использовать либо pathlib из Path, либо os.walk

Здесь есть две реализации:

pathlib

Получает список файлов и представляет случайный. Я думаю, на данный момент этого будет достаточно. Тем не менее, как я могу получить все файлы между root и случайным файлом?

def get_random_files2(ext, top=os.getcwd()):
    file_list = list(Path(top).glob("**/*.{}".format(str(ext))))
    if not len(file_list):
        return "No files matched that extension: {}".format(str(ext))
    rand = random.randint(0, len(file_list) - 1)
    #print(len(file_list))

    return file_list[rand]

extension = "txt"
print(get_random_files2(extension))

os.walk

Это наполовину испечено, так как я все еще учусь его использовать, а мой питон ржавый.

import os

for root, dirs, files in os.walk(".", topdown=True):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))
...