使用tinify和python压缩照片并放入另一个目录
我正慢慢地开始学习python,并希望编写使用tinify api的简单脚本,从未优化的Directority拍摄照片,压缩它并将其放入优化的目录。到目前为止,我的意思是,奇怪的是,我需要将照片保存在主目录和未优化的目录中。如果我在其中一个目录中没有另一个副本,我就出错了。另一件事是,在我启动脚本后,只有第一张照片被压缩并放入优化的目录中,然后出现错误。 到目前为止,我正在试验两张照片:lew.jpg和kot.jpg 我的目录结构如下: 带有脚本的主根目录,以及优化和未优化目录中的其他两个目录使用tinify和python压缩照片并放入另一个目录,python,Python,我正慢慢地开始学习python,并希望编写使用tinify api的简单脚本,从未优化的Directority拍摄照片,压缩它并将其放入优化的目录。到目前为止,我的意思是,奇怪的是,我需要将照片保存在主目录和未优化的目录中。如果我在其中一个目录中没有另一个副本,我就出错了。另一件事是,在我启动脚本后,只有第一张照片被压缩并放入优化的目录中,然后出现错误。 到目前为止,我正在试验两张照片:lew.jpg和kot.jpg 我的目录结构如下: 带有脚本的主根目录,以及优化和未优化目录中的其他两个目录
def optimalizeImages():
for fname in os.listdir('./unoptimalized'):
if fname.endswith(".jpg"):
print(fname)
source = tinify.from_file(fname)
print("processing", fname)
os.chdir("./optimalized")
source.to_file("optimalized-" + fname)
print("changed", fname)
optimalizeImages()
处理第一个图像后出错:
Traceback (most recent call last):
File "python.py", line 20, in <module>
optimalizeImages()
File "python.py", line 11, in optimalizeImages
source = tinify.from_file(fname)
File "/home/grzymowiczma/.local/lib/python2.7/site-packages/tinify/__init__.py", line 79, in from_file
return Source.from_file(path)
File "/home/grzymowiczma/.local/lib/python2.7/site-packages/tinify/source.py", line 13, in from_file
with open(path, 'rb') as f:
IOError: [Errno 2] No such file or directory: 'kot.jpg'
如果我只在根目录中保存照片,没有错误,但也没有任何操作,如果我只在未优化的目录中保存照片,我会得到相同的错误:
Traceback (most recent call last):
File "python.py", line 20, in <module>
optimalizeImages()
File "python.py", line 11, in optimalizeImages
source = tinify.from_file(fname)
File "/home/grzymowiczma/.local/lib/python2.7/site-packages/tinify/__init__.py", line 79, in from_file
return Source.from_file(path)
File "/home/grzymowiczma/.local/lib/python2.7/site-packages/tinify/source.py", line 13, in from_file
with open(path, 'rb') as f:
IOError: [Errno 2] No such file or directory: 'lew.jpg'
这里有两个问题,都是因为您使用的是相对文件名。listdir为您提供了这些相对文件名,但没有路径。您得到的不是./unoptimized/kot.jpg,而是kot.jpg 因此,当您尝试加载图像时:
source = tinify.from_file(fname)
您可以告诉库加载image.jpg,而不加载除当前工作目录以外的任何上下文。这不是正确的目录,如果os.listdir./unoptimized'用于列出所有图像文件,则不是;这表示当前工作目录位于未优化和优化的父目录中
您通过在父目录中放置一个同名的图像文件来解决这个问题,但这并不是解决这个问题的正确方法。下面将对此进行详细介绍
下一个问题是更改工作目录:
os.chdir("./optimalized")
您对第一个映像执行此操作,因此现在当前工作目录已更改为优化。然后,当您为下一个文件进行循环时,您现在在错误的位置读取下一个文件。现在无法找到可能存在于./unoptimized或父目录中的lew.jpg,因为它不在./optimized中
解决方案是添加目录名。您可以使用,但不更改目录:
def optimalizeImages():
input_dir = './unoptimalized'
output_dir = './optimalized'
for fname in os.listdir(input_dir):
if fname.endswith(".jpg"):
print(fname)
source = tinify.from_file(os.path.join(input_dir, fname))
print("processing", fname)
source.to_file(os.path.join(output_dir, "optimalized-" + fname))
print("changed", fname)
请注意,这在很大程度上仍然取决于当前工作目录是否正确,但至少现在它是稳定的,并且保持在优化和未优化的父目录中。您可能希望将其更改为使用绝对路径
还有一个关于语言的旁注:在英语中,这两个词的正确拼写是优化和非优化的。我没有纠正我答案中的错误,以便将重点放在出错的地方。出现了什么错误?请为我们提供异常的完整回溯,这样我们就有了上下文。啊,我有一个印象,循环将我带到优化目录,但没有返回,但不确定它是如何工作的,以及如何修复它。你的答案很清楚,这让我知道我必须关注路径和操作系统关于目录的命令谢谢你的解释和精彩的答案!一切都正常,我知道什么更重要,我明白为什么!也谢谢你纠正我的拼写: