Python遍历目录更换文件名和目录名
程序员文章站
2022-04-18 17:19:44
...
Windows 版
# encoding: utf-8
# author: walker
# date: 2014-03-07
# summary: 深度遍历指定目录,并将子目录和文件名改为小写
# 注意,此程序只针对windows,windows下文件(夹)名不区分大小写
import os
import time
StartTime = time.time()
# 需要处理目录的绝对路径
FileRoot = r'D:\test'
def Main():
# 先修改文件名
for parent, dirnames, filenames in os.walk(FileRoot):
for filename in filenames:
srcFile = os.path.join(parent, filename)
dstFile = os.path.join(parent, filename.lower())
if srcFile == dstFile: # 如果文件名本身就是全小写
continue
print('%s -> %s' % (srcFile, dstFile))
os.rename(srcFile, dstFile)
# 后修改目录名,这里注意topdown参数。
# topdown决定遍历的顺序,
# 如果topdown为True,则先列举top下的目录,然后是目录的目录,依次类推;
# 反之,则先递归列举出最深层的子目录,然后是其兄弟目录,然后父目录。
# 我们需要先修改深层的子目录
for parent, dirnames, filenames in os.walk(FileRoot, topdown=False):
for dirname in dirnames:
srcDir = os.path.join(parent, dirname)
dstDir = os.path.join(parent, dirname.lower())
if srcDir == dstDir: # 如果文件夹名本身就是全小写
continue
print('%s -> %s' % (srcDir, dstDir))
os.rename(srcDir, dstDir)
if __name__ == '__main__':
Main()
print('Time total: %.2fs' % (time.time() - StartTime))
print('Current time: %s' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
Linux 版
# encoding: utf-8
# author: walker
# date: 2018-09-12
# summary: 深度遍历指定目录,并将子目录和文件名改为小写
# 如果目录或文件名冲突,直接覆盖
# 注意,此程序只针对 Linux 设计,其他操作系统是否适用未知
import os
import time
import shutil
StartTime = time.time()
# 需要处理目录的绝对路径
FileRoot = r'/home/walker/test'
def Main():
# 先修改文件名
for parent, dirnames, filenames in os.walk(FileRoot):
for filename in filenames:
srcFile = os.path.join(parent, filename)
dstFile = os.path.join(parent, filename.lower())
if srcFile == dstFile: # 如果文件名本身就是全小写
continue
print('%s -> %s' % (srcFile, dstFile))
shutil.copyfile(srcFile, dstFile) # 目标文件会被覆盖
# 后修改目录名,这里注意topdown参数。
# topdown决定遍历的顺序,
# 如果topdown为True,则先列举top下的目录,然后是目录的目录,依次类推;
# 反之,则先递归列举出最深层的子目录,然后是其兄弟目录,然后父目录。
# 我们需要先修改深层的子目录
for parent, dirnames, filenames in os.walk(FileRoot, topdown=False):
for dirname in dirnames:
srcDir = os.path.join(parent, dirname)
dstDir = os.path.join(parent, dirname.lower())
if srcDir == dstDir: # 如果文件夹名本身就是全小写
continue
print('%s -> %s' % (srcDir, dstDir))
if not os.path.exists(dstDir): # 目标目录不存在,直接改名
os.rename(srcDir, dstDir)
else:
# 目标目录不存在,先拷贝创建硬链接,再删除源文件
# -f, --force
# -r, --recursive
# -l, --link, hard link files instead of copying
cmd = r'cp -frl %s/* %s' % (srcDir, dstDir)
print('cmd: %s' % cmd)
os.system(cmd)
cmd = r'rm -rf %s' % srcDir
print('cmd: %s' % cmd)
os.system(cmd)
if __name__ == '__main__':
Main()
print('Time total: %.2fs' % (time.time() - StartTime))
print('Current time: %s' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
Windows 版本和 Linux 版本的主要区别再重命名目录时,Windows 下不可能存在同名大小写不一致的目录。
相关阅读:
*** walker ***
转载于:https://blog.51cto.com/walkerqt/1369880
上一篇: shell脚本批量更改文件夹目录名称(删除文件夹中所有冒号)
下一篇: Traefik入门
推荐阅读
-
使用Bash Shell获取文件名和目录名的简单方法
-
python遍历一个目录,输出所有的文件名的实例
-
python批量更改目录名/文件名的方法
-
Linux shell 之 提取文件名和目录名的一些方法总结
-
Linux shell 提取文件名和目录名的方法
-
python课后练习当前目录下有一个文件名为score3.txt的文本文件, 存放着某班学生的学号和其两门专业课的成绩。
-
python 删除目录所有文件夹下指定文件名和格式的文件
-
Linux shell 之 提取文件名和目录名的一些方法总结
-
使用Bash Shell获取文件名和目录名的简单方法
-
Linux shell 之 提取文件名和目录名的一些方法总结