将所有文件从目录树移动到另一个目录.如果名称重复,请重命名



我需要获取给定目录树中的所有文件(名为Temp的文件夹和有更多子目录和文件的子目录…(对它们进行加密,并将所有内容移动到一个唯一的目录(名为Temp2的文件夹,没有子目录(。如果有重复的名称,我想将名称更改为text.txt-->text(1(.txt,然后继续移动重命名的文件。

这就是我现在拥有的:

bufferSize = 64 * 1024
password1 = 'password'
print('n> Beginning recursive encryption...nn')
for archivo in glob.glob(sourcePath + '\***', recursive=True):
fullPath = os.path.join(sourcePath, archivo)
fullNewf = os.path.join(destinationPath, archivo + '.aes')
if os.path.isfile(fullPath):
print('>>> Original: t' + fullPath + '')
print('>>> Encrypted: t' + fullNewf + 'n')
pyAesCrypt.encryptFile(fullPath, fullNewf, password1, bufferSize)
shutil.move(fullPath + '.aes', destinationPath)

它加密得很好,然后继续移动加密的文件。问题是,当它发现并试图移动一个具有现有名称的文件时,它会给我一个错误:

shutil.Error:目标路径"E:\AAA\Folder\Folder\Temp2\Text.txt.aes"已存在

所以我需要知道如何在移动过程中重命名具有重复名称的文件,然后再移动它们,但不知道如何继续。

def make_unique_filename(file_path):
duplicate_nr = 0
base, extension = os.path.splitext(file_path)
while os.path.exists(file_path):
duplicate_nr += 1
file_path = f'{base}({duplicate_nr}){extension}'
return file_path

然后

os.rename(src_file_path, make_unique_filename(dest_file_path))

shutil.move移动到目录目标。

使用os.rename更容易。它将文件移动到新的目标文件。新的目标目录文件应该是唯一的,您可以使用make_unique_filename执行此操作。

这个代码现在对我有效。你的os.path.join出现了另一个问题。没有必要。glob.glob已经返回完整路径。

import pyAesCrypt
import os
import glob
sourcePath = r'E:test aessrc'
destinationPath = r'E:test aesdst'
bufferSize = 64 * 1024
password1 = 'password'
def make_unique_filename(file_path):
duplicate_nr = 0
base, extension = os.path.splitext(file_path)
while os.path.exists(file_path):
duplicate_nr += 1
file_path = f'{base}({duplicate_nr}){extension}'
return file_path

for archivo in glob.glob(sourcePath + '\***', recursive=True):
fullPath = archivo
fullNewf = archivo + '.aes'
if os.path.isfile(fullPath):
print('>>> Original: t' + fullPath + '')
print('>>> Encrypted: t' + fullNewf + 'n')
pyAesCrypt.encryptFile(fullPath, fullNewf, password1, bufferSize)
destination_file_path = os.path.join(destinationPath, os.path.split(fullNewf)[1])
destination_file_path = make_unique_filename(destination_file_path)
print(destination_file_path)
os.rename(fullNewf, destination_file_path)

相关内容

  • 没有找到相关文章

最新更新