吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1045|回复: 10
收起左侧

[学习记录] py语言,把同名的不同格式文件,放到同一个文件夹中

[复制链接]
罗萨 发表于 2023-6-29 16:30
#这里是把同名的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
为什么不先遍历目录 文件列表先弄出来。
然后 文件名 通过 去除后缀 后 分组。
然后 再直接根据 分组 批量 创建 目录和移动文件?
 楼主| 罗萨 发表于 2023-6-29 18:06
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)[0]
        
        # 将文件添加到对应的分组中
        if file_name in file_groups:
            file_groups[file_name].append(filename)
        else:
            file_groups[file_name] = [filename]

# 处理每个分组
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文件按照文件名分组存储在一个字典中。然后,我们依次处理每个分组,创建以文件名命名的文件夹,并将相应的文件移动到该文件夹中。

这样的做法使得代码更加清晰和可扩展,并避免了重复计算文件名。

如果您有任何其他问题,请随时提问。
pjy612 发表于 2023-6-29 18:38
。。。您变成了 GPT?。。。
这样的话 还需要  if filename.endswith('.png'):  吗?

平淡最真 发表于 2023-6-29 18:45
你可以问让它用批处理写一下,你会发现代码就5行以内吧

点评

@echo off REM 获取当前工作目录 set "current_directory=%cd%" REM 创建存储文件分组的字典 setlocal enabledelayedexpansion REM 遍历当前目录下的所有文件 for /r "%current_directory%" %%F   发表于 2023-6-29 20:41
 楼主| 罗萨 发表于 2023-6-29 20:49
平淡最真 发表于 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
hrh123 发表于 2023-6-29 21:03

为什么不直接if file.startswith('')

平淡最真 发表于 2023-6-29 22:03
罗萨 发表于 2023-6-29 20:49
@echo off

REM 获取当前工作目录

写的太复杂了
[Asm] 纯文本查看 复制代码
@echo off
for /f "delims=" %%a in ('dir /b *.doc *.png') do (
md %%~na 2>nul
move %%a %%~na
)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
evea + 1 + 1 谢谢@Thanks!

查看全部评分

archer0258 发表于 2023-6-30 10:33
本帖最后由 archer0258 于 2023-6-30 10:38 编辑

[Python] 纯文本查看 复制代码
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-30 12:37
平淡最真 发表于 2023-6-29 22:03
写的太复杂了
[mw_shl_code=asm,true]@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"
)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表