我正慢慢开始研究python,并希望编写使用tinify api的简单脚本,从未优化的目录中拍摄照片,将其压缩并放到优化的目录中。到目前为止,我的部分工作,我的意思是,奇怪的是,我需要将照片保存在主目录和未优化的一个。如果我在其中一个目录中没有另一个副本,我就有错误。另一件事是,在我启动脚本之后,只有第一张照片被压缩并放入优化的目录中,然后出现错误。到目前为止,我正在试验两张照片: 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'发布于 2019-04-04 13:24:09
这里有两个问题,都是因为您使用的是相对文件名。os.listdir()给出了那些相对的文件名,没有路径。而不是./unoptimalized/kot.jpg,你只得到了kot.jpg。
因此,当您尝试加载图像时:
source = tinify.from_file(fname)您告诉库加载image.jpg时,除了当前工作目录之外,没有任何上下文。这不是正确的目录,如果os.listdir('./unoptimalized')试图列出所有图像文件,则不是这样;这表明当前工作目录位于unoptimalized和optimalized的父目录中。
您可以通过在父目录中放置一个同名的图像文件来解决这个问题,但是这并不是解决这个问题的正确方法。下面会有更多的介绍。
下一个问题是更改工作目录:
os.chdir("./optimalized")您可以对第一个映像执行此操作,因此现在当前的工作目录已更改为optimalized。然后,当您循环返回下一个文件时,您现在完全处于错误的位置,无法读取下一个文件。现在,可能存在于lew.jpg或父目录中的./unoptimalized无法找到,因为它不在./optimalized中。
解决方案是添加目录名。您可以使用os.path.join()完成此操作,而不需要更改目录:
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)请注意,这在很大程度上取决于当前工作目录是否正确,但至少现在它是稳定的,并且保持在optimalized和unoptimalized的父目录中。您可能希望将其更改为使用绝对路径。
还有一个关于语言的附加说明:在英语中,这两个词的正确拼写是优化的和未优化的。我没有纠正我的答案中的那些,把注意力集中在出了什么问题上。
https://stackoverflow.com/questions/55516905
复制相似问题