递增文件名值的 While 循环
While loop for incrementing file name value
我有一个功能可以根据扩展名在目录中组织文件。例如,它创建一个名为 txt
的文件夹并将所有文本文件移动到该文件夹中。当已经有一个txt文件夹,如果有一个文本文件,那么它会自动成功地将它移动到该文件夹中。问题是它不会移动与 txt 目录中的文件同名的文件。
这是目录,txt 文件夹中包含一个名为 Text.txt
的文件,该目录还包含一个名为 Text.txt
的文件,因此无法将其移动到文件夹中,我试过了使用 while 循环,但由于多个 for 循环和复杂性,我无法在正确的位置使用它。谢谢!
def all_extensions_category(folder_to_track):
if check_files(folder_to_track) == True:
for file in os.listdir(folder_to_track):
if os.path.isdir(os.path.join(folder_to_track, file)) == False and os.listdir(folder_to_track).__len__() != 0:
try:
file_mappings = collections.defaultdict()
for filename in os.listdir(folder_to_track):
if not os.path.isdir(os.path.join(folder_to_track, filename)):
file_type = filename.split('.')[-1]
file_mappings.setdefault(file_type, []).append(filename)
for folder_name, folder_items in file_mappings.items():
folder_path = os.path.join(folder_to_track, folder_name)
folder_exists = os.path.exists(folder_path)
if not folder_exists:
os.mkdir(folder_path)
for folder_item in folder_items:
source = os.path.join(folder_to_track, folder_item)
destination = os.path.join(folder_path, folder_item)
os.rename(source, destination)
return print("Successfully organized files based on extension")
except Exception as e:
return print(f'{folder_to_track}: is either empty or not organizable')
else:
return print(f'{folder_to_track}: is either empty or not organizable')
如果您想创建数字递增的文件,例如Windows 在复制具有相同名称的文件时执行,将您的 os.rename()
替换为以下函数:
def moveIncrementing(source, destination):
i = 0
while True:
try:
return os.rename(source, f"{destination}_{i}" if i else destination)
except OSError as ex:
i+=1
print(ex)
它将继续尝试移动文件,直到操作成功。只是一个警告,它会在文件扩展名后添加数字,因此文件不会被其扩展名正确识别。但这是我要留给你的练习。
我有一个功能可以根据扩展名在目录中组织文件。例如,它创建一个名为 txt
的文件夹并将所有文本文件移动到该文件夹中。当已经有一个txt文件夹,如果有一个文本文件,那么它会自动成功地将它移动到该文件夹中。问题是它不会移动与 txt 目录中的文件同名的文件。
这是目录,txt 文件夹中包含一个名为 Text.txt
的文件,该目录还包含一个名为 Text.txt
的文件,因此无法将其移动到文件夹中,我试过了使用 while 循环,但由于多个 for 循环和复杂性,我无法在正确的位置使用它。谢谢!
def all_extensions_category(folder_to_track):
if check_files(folder_to_track) == True:
for file in os.listdir(folder_to_track):
if os.path.isdir(os.path.join(folder_to_track, file)) == False and os.listdir(folder_to_track).__len__() != 0:
try:
file_mappings = collections.defaultdict()
for filename in os.listdir(folder_to_track):
if not os.path.isdir(os.path.join(folder_to_track, filename)):
file_type = filename.split('.')[-1]
file_mappings.setdefault(file_type, []).append(filename)
for folder_name, folder_items in file_mappings.items():
folder_path = os.path.join(folder_to_track, folder_name)
folder_exists = os.path.exists(folder_path)
if not folder_exists:
os.mkdir(folder_path)
for folder_item in folder_items:
source = os.path.join(folder_to_track, folder_item)
destination = os.path.join(folder_path, folder_item)
os.rename(source, destination)
return print("Successfully organized files based on extension")
except Exception as e:
return print(f'{folder_to_track}: is either empty or not organizable')
else:
return print(f'{folder_to_track}: is either empty or not organizable')
如果您想创建数字递增的文件,例如Windows 在复制具有相同名称的文件时执行,将您的 os.rename()
替换为以下函数:
def moveIncrementing(source, destination):
i = 0
while True:
try:
return os.rename(source, f"{destination}_{i}" if i else destination)
except OSError as ex:
i+=1
print(ex)
它将继续尝试移动文件,直到操作成功。只是一个警告,它会在文件扩展名后添加数字,因此文件不会被其扩展名正确识别。但这是我要留给你的练习。