如何将具有指定扩展名的文件移动到 Python 中的新文件夹

How to move files with a specified extension to a new folder in Python

我正在尝试将一个文件夹中的文件移动到另一个文件夹,同时只移动扩展名为 .bmp.

的文件

我正在使用 shutil.move() 方法,当我没有指定文件类型时它可以工作,但是一旦我指定它就停止工作。我曾尝试调试它,但无法弄清楚为什么我的代码无法正常工作。我没有得到任何回溯,没有任何反应。

 import time
 import os
 import shutil
 from datetime import datetime

 today = datetime.now()

 src = "."
 dst = ('C:\Python\Image Compressor\File Saving\Archive\BDB040803_St14_' + 
 today.strftime('%d_%m_%Y'))
 files = os.listdir(src)
 for file in src:
     if file.endswith(".bmp"):
          shutil.move(os.path.join(src,file), os.path.join(dst,file))

src 替换为 files 行:

 for file in src:

好的,我终于解决了我的问题。我将 post 我的代码放在这里,以供遇到此问题的其他人参考。 @siloob 感谢您的输入,您的更正是正确的,但在此之后我仍然有回溯,所以我还需要进行一些更改。

我需要传输我的 bmp 文件而不是我的 .py 文件,所以我添加了一个 if 语句,继续跳过任何带有 .py 的文件。这解决了我的问题,只传输了 bmp 文件。

 import time
 import os
 import shutil
 from datetime import datetime

 today = datetime.now()

 src = "."
 dst = ('C:\Python\Image Compressor\File Saving\Archive\BDB040803_St14_' + 
 today.strftime('%d_%m_%Y'))
 files = os.listdir(src)
 for file in files:
     if file.endswith(".py"):
         continue
     else:
         shutil.move(os.path.join(src,file), os.path.join(dst,file))

如果您对替代方法感兴趣(您的方法不错,这并不意味着批评)。

您可以使用 pathlib:

from pathlib import Path
from datetime import date

src = Path()
dst = Path(
    r"C:\Python\Image Compressor\FileSaving\Archive\BDB040803_St14_"
    + date.today().strftime("%d_%m_%Y")
)
for file in src.glob("*.bmp"):
    file.replace(dst / file.name)

.glob allows you to fetch path/file-names that match patterns. The pattern structures aren't as powerful as regex, but can still be pretty helpful. You could also use the glob直接模块。

.replace接替了shutil.move的工作。