对于os.listdir(目录)中的文件名,在修改后引发异常“name'filenames'not defined”

2024-10-06 12:40:22 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我最近开始编写Python(3)。这是一个关于“平均图像”的项目;取图像的像素值,找出平均值,并将其放入图像中。我开始使用Python,因为我听说Python图像库(对我来说它工作得很好),用JavaScript编程太单调了

所以,我的代码:

#!/usr/bin/env python3
from PIL import Image
import os

main_dir = "/Users/dragonsruleethanslota/Downloads/image_averaging_python3.6"
image_dir = f"{main_dir}/images"
image_list = []
invisibles = [".DS_Store", ".Trashes"]

def reset_temptxt():
    with open(f"{main_dir}/temp.txt", "w") as temptxt:
        temptxt.write("")

def check_extensions(countq = False):
    count = 0
    for filename in os.listdir(image_dir): # Problematic lines of code
        if filename in invisibles:         # Also problematic
            continue                       # Also problematic
        try:
            Image.open(f"{image_dir}/{filename}")
        except OSError:
            count = count + 1
    if countq:
        return count # Returns amount of bad file extensions
    else:
        return not count # Returns boolean of whether there are bad file extensions or not

if check_extensions():
    for file in os.listdir(image_dir):
        if filename in invisibles:
            continue
        image = Image.open(f"{image_dir}/{file}")
        image_list.append([image, image.load()])

reset_temptxt()

def do_averages(xpixel, ypixel):
    with open(f"{main_dir}/temp.txt", "a") as temptxt:
       for (img, pixel_img) in image_list:
           pixel = pixel_img[xpixel, ypixel]
           temptxt.write("{},{},{}".format(*pixel))

do_averages(0, 0)

(我还有一个名为temp.txt的文件和一个名为images的文件夹)

这一切让人非常困惑的是,当我晚上回来重新启动它时:我去完成了do_averages()函数的编程,然后运行它,期望在temp.txt中看到一些东西,但是什么也没有运行。这是因为check_extensions()函数失败,因为macOS向文件夹中添加了一个名为“.DS_Store”的文件。这导致功能失效;我添加了invisibles列表,并检查当前文件是否在这些文件中。如果是这样,那么跳过代码的其余部分

但是,这一新行会引发一个错误!显然,Python找不到变量filename(由循环分配的变量)。更让人困惑的是,当我删除支票时,没有出现错误。请帮忙;我是Python新手,觉得这是一个不经意的错误


Tags: in图像imagetxtifmaincountdir
2条回答

问题不在你认为。。。 查看您的第二个功能检查扩展:

if check_extensions():
    for file in os.listdir(image_dir):
        if filename in invisibles:
            continue
        image = Image.open(f"{image_dir}/{file}")
        image_list.append([image, image.load()])

这里:它找不到文件名。。。因为你说“为文件在”,然后要求文件名!!! 因此,决定使用以下任一方法:

if check_extensions():
    for filename in os.listdir(image_dir):
        if filename in invisibles:
            continue
        image = Image.open(f"{image_dir}/{file}")
        image_list.append([image, image.load()])

或:

if check_extensions():
    for file in os.listdir(image_dir):
        if file in invisibles:
            continue
        image = Image.open(f"{image_dir}/{file}")
        image_list.append([image, image.load()])

问题在于:

if check_extensions():
    for file in os.listdir(image_dir):
        if filename in invisibles:
            continue

您正试图访问filename,但在循环中使用的变量是file。 将其更改为:

if check_extensions():
    for file in os.listdir(image_dir):
        if file in invisibles:
            continue

相关问题 更多 >