我有以下问题。 假设我有一个文件夹中的文本文件列表:
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
之间。
我的问题:使用某种递归是否有形式?而不是使用python 2.7在字典中迭代k,v
。
非常感谢你!
答案 0 :(得分:1)
有一种递归形式,与所有迭代算法一样,会有一种替代形式。但是,很少使用递归版本,因为可能会产生堆栈溢出,这可能是由于列表的长度比堆栈空间长。
递归算法可能非常具有表现力,但对我而言,数据的组织要求被迭代。
顺便说一下你的dict
可以用词典理解来创建:
Dict = { FOLDER_A[i]]:FOLDER_B[i] for i in range(len(FOLDER_A)) }
答案 1 :(得分:-1)
这里你不需要任何递归。您可以遍历第一个文件夹中的文件并比较名称,然后将第一个文件夹中的信息复制到第二个文件夹中的文件,有些类似的事情:
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)