项目场景:
在用python做一个蜘蛛纸牌时,需要添加多张纸牌的照片,而用tkinter.PhotoImage()仅支持gif等几种不常用的图片格式这就需要批量修该图片名,一个一个修改太麻烦,于是就网上搜了一下用python批量修改文件名的代码,自己稍作加工就可以了,我是把一个目录下的所有图片,直接命名为从1到图片的个数。
问题描述:
#修改图片名
import os
print("注:此程序会将该目录下所有图片从1开始重命名")
h=input("你想要修改成的后缀名:")
dir=input("请输入要修改的文件目录的地址:")
imglist = os.listdir(dir)#返回该目录下所有文件名的列表
num_files = len(imglist)
for x in range(0,num_files):
print("--------------------------")
old_file = os.path.join(dir, imglist[x])#旧文件名的全路径名
print(old_file)
imglist[x]=str(x+1)#遍历文件名修改为:序号+1 注意这里要类型转换
print(imglist[x])
new_file = imglist[x] + h #为新文件名添加后缀名
print(new_file)
#new_file = os.path.join(dir,new_file)#
new_file = dir+'\\'+new_file
os.rename(old_file, new_file)
new_file = os.path.join(dir,new_file)
new_file = dir+'\\'+new_file
这两条语句是等价的,一开始,我是直接这样写的:new_file = dir+new_file,没有加‘\\’(这里要加双斜杠‘\\’,一个不行),结果导致的问题就是:例如我的图片目录是:D:\ege\百度图片-发现多彩世界 ,我直接加上文件名后,执行程序所有的图片移动到了ege目录下,且图片名字前面加上了‘百度图片-发现多彩世界 ’。
这个是在用cmd运行java程序时发现编码格式要为gbk所以就写了这个程序来批量修改指定目录下的所有文件编码格式,注意当文件内容很少时,识别的编码格式可能会不准确。utf-8,gbk都支持。
#修改文件格式
import os
import chardet
import codecs
print("注意:如果文件内容太少可能识别不准确")
h=input("你想要转化成什么编码格式?")
print("注意此目录下的所有文件编码都将被修改")
dir=input("请输入要修改的文件目录的地址:")
imglist = os.listdir(dir)#返回该目录下所有文件名的列表
num_files = len(imglist)
for x in range(0,num_files):
print("--------------------------")
old_file = os.path.join(dir, imglist[x])#文件名的全路径名
with open(old_file, 'rb') as f:
data = f.read()
y=chardet.detect(data)#返回文件当前的编码格式,返回类型为字典类型
print(y)#打印当前文件编码格式
with codecs.open(filename=old_file, mode='r', encoding=y['encoding']) as fi:
data1 = fi.read()
with open(old_file, mode='w', encoding=h) as fo:
fo.write(data1)
fo.close()