我慢慢开始学习python,我想写一个简单的脚本,使用tinifyapi,从未优化的directority中拍照,压缩它并放到优化的目录中。到目前为止,工作的一部分,我的意思是奇怪的,我需要保持照片在主目录和未优化的一个。如果我在这些目录中没有另一个副本,我就出错了。另一件事是,在我启动脚本后,只有第一张照片被压缩并放入优化的目录中,然后出现错误。 到目前为止,我正在试验两张照片:卢.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'
这里有两个问题,都是因为您使用的是相对文件名。
os.listdir()
给你那些相对的文件名,没有路径。你得到的不是./unoptimalized/kot.jpg
,而是kot.jpg
。你知道吗因此,当您尝试加载图像时:
告诉库加载
image.jpg
,除了当前工作目录之外,没有任何上下文。这不是正确的目录,如果os.listdir('./unoptimalized')
工作以列出所有图像文件,则不是;这表明当前工作目录位于unoptimalized
和optimalized
的父目录中。你知道吗您通过在父目录中放置一个同名的图像文件来解决这个问题,但这并不是解决这个问题的正确方法。下面将详细介绍。你知道吗
下一个问题是更改工作目录:
对第一个映像执行此操作,因此现在当前工作目录已更改为
optimalized
。然后,当您为下一个文件进行循环时,您现在在错误的位置读取下一个文件。现在无法找到lew.jpg
,它可能存在于./unoptimalized
或父目录中,因为它不在./optimalized
中。你知道吗解决方案是添加目录名。您可以使用^{} 和而不是更改目录:
请注意,这在很大程度上仍取决于当前工作目录是否正确,但至少它现在是稳定的,并且同时位于
optimalized
和unoptimalized
的父目录。您可能需要将其更改为使用绝对路径。你知道吗还有一个关于语言的旁注:在英语中,这两个词的正确拼写是优化和未优化。我没有纠正我的答案中的那些问题,以保持对什么是错的重点。你知道吗
相关问题 更多 >
编程相关推荐