py语言,把同名的不同格式文件,放到同一个文件夹中
#这里是把同名的doc文件与png文件放到同一个名字的文件夹中,由GPT生成import os
import shutil
# 获取当前工作目录
current_directory = os.getcwd()
# 遍历当前目录下的所有文件
for filename in os.listdir(current_directory):
if filename.endswith('.png'):
png_file = os.path.join(current_directory, filename)
doc_file = os.path.join(current_directory, filename[:-4] + '.doc')
# 创建同名的文件夹
folder_path = os.path.join(current_directory, filename[:-4])
os.makedirs(folder_path, exist_ok=True)
try:
# 移动PNG文件和DOC文件到同名文件夹中
shutil.move(png_file, folder_path)
shutil.move(doc_file, folder_path)
except FileNotFoundError:
pass 为什么不先遍历目录 文件列表先弄出来。
然后 文件名 通过 去除后缀 后 分组。
然后 再直接根据 分组 批量 创建 目录和移动文件? pjy612 发表于 2023-6-29 17:35
为什么不先遍历目录 文件列表先弄出来。
然后 文件名 通过 去除后缀 后 分组。
然后 再直接根据 分组 批 ...
#您提出的修改方案非常合理,将文件列表先获取出来,然后根据文件名分组进行批量处理,可以提高代码的效率和可读性。下面是按照您的建议重构的代码:
python
import os
import shutil
# 获取当前工作目录
current_directory = os.getcwd()
# 存储文件分组的字典
file_groups = {}
# 遍历当前目录下的所有文件
for filename in os.listdir(current_directory):
if filename.endswith('.png'):
# 获取文件名(去除扩展名)
file_name = os.path.splitext(filename)
# 将文件添加到对应的分组中
if file_name in file_groups:
file_groups.append(filename)
else:
file_groups =
# 处理每个分组
for file_name, file_list in file_groups.items():
# 创建同名的文件夹
folder_path = os.path.join(current_directory, file_name)
os.makedirs(folder_path, exist_ok=True)
# 移动文件到同名文件夹中
for file in file_list:
file_path = os.path.join(current_directory, file)
shutil.move(file_path, folder_path)
#通过这种方式,我们首先遍历整个目录,将.png文件按照文件名分组存储在一个字典中。然后,我们依次处理每个分组,创建以文件名命名的文件夹,并将相应的文件移动到该文件夹中。
这样的做法使得代码更加清晰和可扩展,并避免了重复计算文件名。
如果您有任何其他问题,请随时提问。 。。。您变成了 GPT?。。。
这样的话 还需要if filename.endswith('.png'):吗?
{:301_995:}
你可以问让它用批处理写一下,你会发现代码就5行以内吧 平淡最真 发表于 2023-6-29 18:45
你可以问让它用批处理写一下,你会发现代码就5行以内吧
@echo off
REM 获取当前工作目录
set "current_directory=%cd%"
REM 创建存储文件分组的字典
setlocal enabledelayedexpansion
REM 遍历当前目录下的所有文件
for /r "%current_directory%" %%F in (*.png) do (
REM 获取文件名(去除扩展名)
set "filename=%%~nF"
REM 将文件添加到对应的分组中
if defined file_groups[!filename!] (
set "file_groups[!filename!]=!file_groups[!filename!]!;%%~fF"
) else (
set "file_groups[!filename!]=%%~fF"
)
)
REM 处理每个分组
for /f "tokens=2,3 delims==;" %%G in ('set file_groups[') do (
REM 创建同名的文件夹
set "folder_path=%current_directory%\%%G"
mkdir "!folder_path!"
REM 移动文件到同名文件夹中
for %%F in (%%H) do (
move "%%~F" "!folder_path!"
)
)
endlocal
为什么不直接`if file.startswith('')` 罗萨 发表于 2023-6-29 20:49
@echo off
REM 获取当前工作目录
写的太复杂了
@echo off
for /f "delims=" %%a in ('dir /b *.doc *.png') do (
md %%~na 2>nul
move %%a %%~na
) 本帖最后由 archer0258 于 2023-6-30 10:38 编辑
import shutil
from pathlib import Path
p = Path('') # 你的文件夹
for i in p.rglob('*.*'):
d = p / i.stem
d.mkdir(exist_ok=True)
if not (d / i.name).exists():
shutil.copy(i, d)
i.unlink()
平淡最真 发表于 2023-6-29 22:03
写的太复杂了
@echo off
for /f "delims=" %%a in ('dir /b *.doc *.png') do ( ...
@echo off
for %%F in (*.png *.doc) do (
mkdir "%%~nF" 2>nul
move "%%~F" "%%~nF"
)
页:
[1]