我有多个文件夹,每个文件夹都有一个人的名字,首先是名字,最后是姓氏.我想更改文件夹名称,以便首先使用逗号,然后是第一个名称.
例如,在文件夹Test中,我有:
C:/Test/John Smith
C:/Test/Fred Jones
C:/Test/Ben Jack Martin
Run Code Online (Sandbox Code Playgroud)
我想这样做:
C:/Test/Smith, John
C:/Test/Jones, Fred
C:/Test/Martin, Ben Jack
Run Code Online (Sandbox Code Playgroud)
我尝试了os.rename的一些东西,但我似乎无法使用不同的名称长度,我不知道如何将逗号插入姓氏.
此外,一些文件夹名称已经是正确的形式,所以我需要在重命名期间跳过这些文件夹.我想你可以通过添加一个if来做到这一点,这样如果文件夹名称包含一个逗号,它将继续.
否则,姓氏将始终是文件夹名称中的最后一个单词.
感谢您的任何帮助,您可以提供.
phi*_*hag 32
您可以使用os.listdir和os.path函数相当直接地编写它:
import os
basedir = 'C:/Test'
for fn in os.listdir(basedir):
if not os.path.isdir(os.path.join(basedir, fn)):
continue # Not a directory
if ',' in fn:
continue # Already in the correct form
if ' ' not in fn:
continue # Invalid format
firstname,_,surname = fn.rpartition(' ')
os.rename(os.path.join(basedir, fn),
os.path.join(basedir, surname + ', ' + firstname))
Run Code Online (Sandbox Code Playgroud)
一个替代方案os.rename是shutil.move(src, dest)
import shutil
import os
shutil.move("M://source/folder", "M://destination/folder")
os.rename("M://source/folder", "M://destination/folder")
Run Code Online (Sandbox Code Playgroud)
区别:
- 如果源路径和目标路径位于不同的文件系统或驱动器上,操作系统模块可能无法移动文件。但在这种情况下,shutil.move 不会失败。
Shutil.move 检查源路径和目标路径是否在同一文件系统上。但是 os.rename 不检查,因此有时会失败。
检查源路径和目标路径后,如果发现它们不在同一个文件系统中,shutil.move 会先将文件复制到目标。然后它将从源文件中删除该文件。因此,当源路径和目标路径不在同一驱动器或文件系统上时,我们可以说 shutil.move 是在 Python 中移动文件的更智能方法。
Shutil.move 适用于高级函数,而 os.rename 适用于低级函数。
我还建议使用pathlib来操纵路径:
from shutil import move
from pathlib import Path
base_path = Path("C:/Test")
for folder in base_path.iterdir():
if not folder.is_dir() or folder.name.startswith("."):
continue
name = folder.name
new_name = ", ".join(name.split(" "))
new_folder = folder.parent / new_name
move(folder, new_folder)
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以将其放入一个命令中,并包含完整路径。
import os
os.rename("/path/old_folder_name", "/path/new_folder_name")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51003 次 |
| 最近记录: |