python 截图文件夹循环问题

问题遇到的现象和发生背景

python 截图遇到的文件夹循环问题

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
# resize the picture
from PIL import Image
for i in range(1,45):
    img = Image.open("C://Users/xiaoran.ma/Desktop/Desk/dream/pic/str(i).png")
    print(img.size)
    cropped = img.crop((100, 0, 1200,625)) # (left, upper, right, lower)
    cropped.save("C://Users/xiaoran.ma/Desktop/Desk/dream/pic_cut/str(i).png")

运行结果及详细报错内容

FileNotFoundError: [Errno 2] No such file or directory: 'C://Users/xiaoran.ma/Desktop/Desk/dream/pic/str(i).png'

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”

你怎么在文件路径里面调用python的str()函数,这会当成字符串,不识别,使用python的格式化字符串将变量加到字符串中,或者直接拼接,修改如下,记得采纳哦!

# resize the picture
from PIL import Image
for i in range(1,45):
    img = Image.open(f"C://Users/xiaoran.ma/Desktop/Desk/dream/pic/{i}.png")
    print(img.size)
    cropped = img.crop((100, 0, 1200,625)) # (left, upper, right, lower)
    cropped.save(f"C://Users/xiaoran.ma/Desktop/Desk/dream/pic_cut/{i}.png")

处理方法有很多!

望采纳!!!点击回答右侧采纳即可!!这个错误是由于代码中使用了错误的文件路径导致的。在代码中,你使用了字符串"str(i)"来表示文件名,但是实际上应该使用变量i来表示。

修改代码,将 "str(i)" 替换为 "{}".format(i) 即可

修改后的代码:

# resize the picture
from PIL import Image
for i in range(1,45):
    img = Image.open("C://Users/xiaoran.ma/Desktop/Desk/dream/pic/{}.png".format(i))
    print(img.size)
    cropped = img.crop((100, 0, 1200,625)) # (left, upper, right, lower)
    cropped.save("C://Users/xiaoran.ma/Desktop/Desk/dream/pic_cut/{}.png".format(i))


这个问题是因为在打开文件时,路径字符串中包含字符串 "str(i)",而不是 i 的值。
要解决这个问题,可以使用字符串插值(string interpolation),来代替在字符串中直接编写变量的值。

可以把下面这行代码

img = Image.open("C://Users/xiaoran.ma/Desktop/Desk/dream/pic/str(i).png")

改成

img = Image.open(f"C://Users/xiaoran.ma/Desktop/Desk/dream/pic/{i}.png")

同样的方法也可以更新保存图像的路径.

cropped.save(f"C://Users/xiaoran.ma/Desktop/Desk/dream/pic_cut/{i}.png")

另外,为了避免类似的问题出现,建议在代码中使用相对路径或绝对路径,不要使用混合路径

仅供参考,望采纳,谢谢。

FileNotFoundError: [Errno 2] No such file or directory: 'C://Users/xiaoran.ma/Desktop/Desk/dream/pic/str(i).png'
FileNotFoundError:[Erno 2]没有这样的文件或目录:'C:/Users/xiaoran.ma/Desktop/Desk/dream/pic/str(i).png'

出现该类现象,大概率是因为路径问题
就像上面的答友提出的一样,str(i).png替换为 "{}".format(i) 。
其次,最好是使用绝对路径
当然还需要注意Windows与Linux分隔符的区别:

Windows下的分割符:\
Linux下的分割符:/

建议采用如下方式, 修改如下:

# resize the picture
from PIL import Image

for i in range(1, 45):
    img = Image.open(r"C:\Users\xiaoran.ma\Desktop\Desk\dream\pic\{name}.png".format(name=str(i)))
    print(img.size)
    cropped = img.crop((100, 0, 1200, 625))  # (left, upper, right, lower)
    cropped.save(r"C:\Users\xiaoran.ma\Desktop\Desk\dream\pic_cut\{name}.png".format(name=str(i)))

可以使用 os 模块来实现循环遍历文件夹中的图片文件并进行截图。具体实现可以使用 os.listdir() 方法获取文件夹中的文件名列表,然后使用 os.path.join() 方法将文件名和文件夹路径连接起来,得到每个文件的绝对路径。最后使用Pillow库中的Image来读取图片并进行截图。
具体示例代码如下:

import os
from PIL import Image

folder_path = "path/to/your/folder"
for filename in os.listdir(folder_path):
    file_path = os.path.join(folder_path, filename)
    if os.path.isfile(file_path):
        with Image.open(file_path) as img:
            # do something with the image
# resize the picture
from PIL import Image
for i in range(1,45):
    # img = Image.open("C://Users/xiaoran.ma/Desktop/Desk/dream/pic/str(i).png")
    # 作者此行写错,请使用以下代码
    img = Image.open(f"C://Users/xiaoran.ma/Desktop/Desk/dream/pic/{i}.png")
    print(img.size)
    cropped = img.crop((100, 0, 1200,625)) # (left, upper, right, lower)
    # cropped.save("C://Users/xiaoran.ma/Desktop/Desk/dream/pic_cut/str(i).png")
    # 作者此行存在问题,应使用
    cropped.save(f"C://Users/xiaoran.ma/Desktop/Desk/dream/pic_cut/{i}.png")

FileNotFoundError: [Errno 2] No such file or directory: 'C://Users/xiaoran.ma/Desktop/Desk/dream/pic/str(i).png'

问题出在文件路径,这样编写文件路径是不对的,应当使用文本替换的方法。
可以使用format函数:

# resize the picture
from PIL import Image
for i in range(1,45):
    img = Image.open("C://Users/xiaoran.ma/Desktop/Desk/dream/pic/{}.png".format(i))
    print(img.size)
    cropped = img.crop((100, 0, 1200,625)) # (left, upper, right, lower)
    cropped.save("C://Users/xiaoran.ma/Desktop/Desk/dream/pic_cut/{}.png".format(i))

也可以用简化版的:

img = Image.open(f"C://Users/xiaoran.ma/Desktop/Desk/dream/pic/{i}.png")

同样,处理后图像的保存路径可以修改为

cropped.save(f"C://Users/xiaoran.ma/Desktop/Desk/dream/pic_cut/{i}.png")

仅供参考,望采纳!