Рекурсия между двумя списками текстовых файлов - PullRequest
0 голосов
/ 11 мая 2018

У меня следующий вопрос.Допустим, у меня есть список текстовых файлов в папке:

D:/Users/Roger/A

И еще один список текстовых файлов в другой папке:

D:/Users/Roger/Reports

(списки представляют собой полный путь к ним), и они расположены в алфавитном порядке, поэтому они соответствуют 1: 1, например:

FOLDER_A = ["D:/Users/Roger/A/a.txt", "D:/Users/Roger/A/b.txt"]
FOLDER_B = ["D:/Users/Roger/B/a.txt", "D:/Users/Roger/A/b.txt"]

Я создал словарь, используя оба списка

Dict = {}
for i in range(len(FOLDER_A)):
    Dict[FOLDER_A[i]] = FOLDER_B[i]
    sorted(Dict.items())

Позже я скопировал информацию a.txt в папке A в файл a.txt в папке B, выполняя цикл for, который повторяется между key и value словаря.

Мой вопрос: Есть ли форма для этого с помощью какой-то рекурсии?вместо итерации по k,v в словаре с python 2.7. ??Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Тебе здесь не нужна рекурсия. Вы можете перебирать файлы в первой папке и сравнивать имена, а затем копировать информацию из первой папки в файл во второй папке, что-то вроде этого:

import os

folder1= "folder1"
folder2 = "folder2"

for root, dirs, files in os.walk(folder1):
    for file in files:
    if file in os.listdir(folder2):
        file_path = os.path.join(folder1, file)
            file1_path = os.path.join(folder2, file)
        if os.path.isfile(file1_path):
        with open(file_path) as f:
            lines = f.readlines()
            with open(file1_path, 'a') as f1:
                f1.writelines(lines)
0 голосов
/ 11 мая 2018

Существует форма рекурсии, так как со всеми итерационными алгоритмами будет альтернативная форма. Тем не менее, рекурсивная версия редко используется из-за вероятности генерации переполнения стека, что было бы связано с длиной списка, превышающей пространство стека.

Рекурсивные алгоритмы могут быть очень выразительными, но для меня организация данных требует повторения.

Кстати, ваш dict может быть создан с использованием словаря:

Dict = { FOLDER_A[i]]:FOLDER_B[i] for i in range(len(FOLDER_A)) }
...