import os import sys reload(sys) sys.setdefaultencoding("utf-8") os.system('chcp 65001') rootdir = os.path.abspath(os.path.dirname(__file__)) + '/' if __name__ == '__main__': dirs = ['pictures'] for dir in dirs: srcDir = os.path.realpath(rootdir + "/" + dir) # print(srcDir) os.system("super-tinypng {}\*.png".format(srcDir)) 这段代码有问题吗?如果我想对pictures目录下的所有子目录,使用super-tinypng命令进行图片压缩,并且将压缩之后的图片替换原图片。请问要怎么修改,您能给一个详细的代码吗?
时间: 2023-06-14 11:04:11 浏览: 193
这段代码存在一些问题:
1. 在 Python3 中,`sys.setdefaultencoding` 已经被废弃,不能再使用了。
2. `os.system("super-tinypng {}\*.png".format(srcDir))` 这行代码存在两个问题:第一,应该使用 `os.path.join(srcDir, "*.png")` 来获取所有 PNG 格式的文件;第二,这个命令会对原文件进行覆盖,可能会导致数据丢失,因此应该在另一个目录中保存压缩后的文件。
下面是修改后的代码,可以对 `pictures` 目录下的所有子目录中的 PNG 图片进行压缩,并将压缩后的图片保存到 `compressed` 目录中:
```python
import os
import shutil
rootdir = os.path.abspath(os.path.dirname(__file__)) + '/'
if __name__ == '__main__':
dirs = ['pictures']
for dir in dirs:
srcDir = os.path.realpath(rootdir + "/" + dir)
dstDir = os.path.realpath(rootdir + "/compressed/" + dir)
# 创建保存压缩后图片的目录
if not os.path.exists(dstDir):
os.makedirs(dstDir)
# 遍历所有子目录中的 PNG 文件
for root, subdirs, files in os.walk(srcDir):
for file in files:
if file.lower().endswith(".png"):
srcFile = os.path.realpath(os.path.join(root, file))
dstFile = os.path.realpath(os.path.join(dstDir, file))
# 使用 super-tinypng 压缩图片
os.system("super-tinypng \"{}\" -o \"{}\"".format(srcFile, dstFile))
# 将压缩后的文件替换原文件
shutil.move(dstFile, srcFile)
```
这段代码会先创建一个 `compressed` 目录,然后遍历 `pictures` 目录下的所有子目录,找到所有 PNG 图片文件,并使用 `super-tinypng` 命令将它们压缩到 `compressed` 目录中,最后再将压缩后的文件替换原文件。注意,这段代码需要在支持 `super-tinypng` 命令的环境中运行。
阅读全文