②. GPT错误:图片尺寸写入excel权限错误

news/2024/7/21 3:48:08 标签: python, 青少年编程, 自动化, excel, 图像处理

꧂问题最初 ꧁

input输入图片路径
print图片尺寸 大小 长宽高 有颜色占比>0.001的

按照大小排序



将打印信息存储excel表格

文件名 表格路径 图片大小 尺寸 颜色类型 占比信息

input输入的是文件就处理文件
是文件夹📁就处理文件。路径下的图片
1. 是处理本路径图片
2. 处理文件夹下,是遍历此目录树下所有的图片文件

/storage/emulated/0/代码文件/excel/

命名:图片尺寸表格 ("%Y-%m-%d %H:%M:%S").后缀名


꧂ 最初错误❌代码꧁

import os
import glob
import openpyxl
from openpyxl.utils import get_column_letter
from openpyxl.styles import Font
from PIL import Image
from datetime import datetime


def process_image(image_path):
    img = Image.open(image_path)
    image_size = os.path.getsize(image_path)

    width, height = img.size
    color_info = get_color_info(img)

    return {
        '文件名': os.path.basename(image_path),
        '图片大小': format_size(image_size),
        '尺寸': f'{width}x{height}',
        '颜色类型': color_info['types'],
        '占比信息': color_info['proportions']
    }


def get_color_info(img):
    # 获取图片像素信息
    pixels = img.load()

    # 统计颜色的像素数量
    color_counts = {}
    total_pixels = img.width * img.height
    for i in range(img.width):
        for j in range(img.height):
            color = pixels[i, j]
            color_counts[color] = color_counts.get(color, 0) + 1

    # 计算每种颜色的占比
    color_info = {}
    for color, count in color_counts.items():
        proportion = count / total_pixels
        if proportion > 0.001:
            color_info[color] = proportion

    return {
        'types': len(color_info.keys()),
        'proportions': color_info
    }


def format_size(size):
    # 格式化文件大小
    sizes = ['B', 'KB', 'MB', 'GB']
    index = 0
    while size >= 1024 and index < len(sizes) - 1:
        size /= 1024
        index += 1
    return f'{round(size, 2)} {sizes[index]}'


def create_excel_table(data, table_path):
    wb = openpyxl.Workbook()
    ws = wb.active

    # 设置标题行的样式
    title_font = Font(bold=True)
    for col_num, column_title in enumerate(data[0].keys(), 1):
        col_letter = get_column_letter(col_num)
        ws[f'{col_letter}1'] = column_title
        ws[f'{col_letter}1'].font = title_font

    # 填充数据
    for row_num, row_data in enumerate(data, 2):
        for col_num, cell_value in enumerate(row_data.values(), 1):
            col_letter = get_column_letter(col_num)
            ws[f'{col_letter}{row_num}'] = cell_value

    # 自动调整列宽
    for col_num, column_title in enumerate(data[0].keys(), 1):
        col_letter = get_column_letter(col_num)
        ws.column_dimensions[col_letter].auto_size = True

    # 保存表格
    wb.save(table_path)


def process_images(input_path):
    if os.path.isfile(input_path):
        image_files = [input_path]
    elif os.path.isdir(input_path):
        pattern = os.path.join(input_path, '**', '*.jpg')
        image_files = glob.glob(pattern, recursive=True)
    else:
        print("输入路径无效!")
        return

    image_data = []
    for image_file in image_files:
        try:
            image_info = process_image(image_file)
            image_data.append(image_info)
        except Exception as e:
            print(f"处理图片 {image_file} 时出错:{str(e)}")

    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    table_name = f"图片尺寸表格 ({timestamp}).xlsx"
    table_path = os.path.join('/storage/emulated/0/代码文件/excel/', table_name)

    create_excel_table(image_data, table_path)
    print("已创建图片尺寸表格:", table_path)


if __name__ == '__main__':
    input_path = input("请输入文件路径或文件夹路径:")
    process_images(input_path)
    
    
#添加检测:
# 新添加的代码
var = "hello"
print("type:", type(var))
print("value:", str(var))
input("pause at line: {}".format(str(__fil e__.split("/")[-1])+": "+str(30)))
print("help:", help(type(var)))

比,图片尺寸1.2保存表格1.1.py" && exit   <   File "/storage/emulated/0/qpython/评论截 图问题1.矩阵2.1.2.1空行问题3.4.6色心6.6꧂py thon图片:获得颜色占比,图片尺寸1.2保存表格1.1.py", line 123
    input("pause at line: {}".format(str(_ _fil e__.split("/")[-1])+": "+str(30)))
                                         ^ ^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: invalid syntax. Perhaps you f orgot a comma?
1|:/ $

꧂ 中间的几次错误①꧁

错误发生在第123行的代码中:

input(“pause at line: {}”.format(str(fil e.split("/")[-1])+": "+str(30)))

这行代码中,__file__是一个内置变量,表示当前脚本的文件路径。然后使用split("/")[-1]来获取文件名,并与字符串"pause at line: "和行数30进行拼接。但是,在文件名获取之后,您在__file__split("/")[-1]之间放置了一个空格,导致了语法错误。

解决方法是将空格去掉,并确保代码的各个部分正确连接起来,如下所示:

input(“pause at line: {}”.format(str(file.split("/")[-1]) + ": " + str(30)))

请注意,上述代码只是用于调试目的,如果不需要暂停程序运行,可以将其注释掉或删除。

꧂ 中间的几次错误②꧁

根据错误信息,出现了一个值转换错误。在这段代码中,尝试将一个字典作为Excel表格单元格的值进行赋值,但是Excel表格只能接受基本数据类型的值。

要解决这个问题,你需要修改代码的逻辑,确保在赋值给Excel表格单元格之前将字典值转换为字符串或其他适当的数据类型。你可以使用str()方法将字典转换为字符串,然后再将字符串赋值给Excel单元格。例如:

python">cell_value = str(cell_value)
ws[f'{col_letter}{row_num}'] = cell_value

通过这样的方式,你可以处理字典值的转换问题,并将其正确地赋值给Excel表格单元格。

꧂代码 ꧁

import os
import glob
import openpyxl
from openpyxl.utils import get_column_letter
from openpyxl.styles import Font
from PIL import Image
from datetime import datetime


def process_image(image_path):
    img = Image.open(image_path)
    image_size = os.path.getsize(image_path)

    width, height = img.size
    color_info = get_color_info(img)

    return {
        '文件名': os.path.basename(image_path),
        '图片大小': format_size(image_size),
        '尺寸': f'{width}x{height}',
        '颜色类型': color_info['types'],
        '占比信息': color_info['proportions']
    }


def get_color_info(img):
    # 获取图片像素信息
    pixels = img.load()

    # 统计颜色的像素数量
    color_counts = {}
    total_pixels = img.width * img.height
    for i in range(img.width):
        for j in range(img.height):
            color = pixels[i, j]
            color_counts[color] = color_counts.get(color, 0) + 1

    # 计算每种颜色的占比
    color_info = {}
    for color, count in color_counts.items():
        proportion = count / total_pixels
        if proportion > 0.001:
            color_info[color] = proportion

    return {
        'types': len(color_info.keys()),
        'proportions': color_info
    }


def format_size(size):
    # 格式化文件大小
    sizes = ['B', 'KB', 'MB', 'GB']
    index = 0
    while size >= 1024 and index < len(sizes) - 1:
        size /= 1024
        index += 1
    return f'{round(size, 2)} {sizes[index]}'


def create_excel_table(data, table_path):
    wb = openpyxl.Workbook()
    ws = wb.active

    # 设置标题行的样式
    title_font = Font(bold=True)
    for col_num, column_title in enumerate(data[0].keys(), 1):
        col_letter = get_column_letter(col_num)
        ws[f'{col_letter}1'] = column_title
        ws[f'{col_letter}1'].font = title_font

    # 填充数据
    for row_num, row_data in enumerate(data, 2):
        for col_num, cell_value in enumerate(row_data.values(), 1):
#            col_letter = get_column_letter(col_num)
            
            cell_value = str(cell_value)
            ws[f'{col_letter}{row_num}'] = cell_value
            
    # 自动调整列宽
    for col_num, column_title in enumerate(data[0].keys(), 1):
        col_letter = get_column_letter(col_num)
        ws.column_dimensions[col_letter].auto_size = True

    # 保存表格
    wb.save(table_path)


def process_images(input_path):
    if os.path.isfile(input_path):
        image_files = [input_path]
    elif os.path.isdir(input_path):
        pattern = os.path.join(input_path, '**', '*.jpg')
        image_files = glob.glob(pattern, recursive=True)
    else:
        print("输入路径无效!")
        return

    image_data = []
    for image_file in image_files:
        try:
            image_info = process_image(image_file)
            image_data.append(image_info)
        except Exception as e:
            print(f"处理图片 {image_file} 时出错:{str(e)}")

    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    table_name = f"图片尺寸表格 ({timestamp}).xlsx"
    table_path = os.path.join('/storage/emulated/0/代码文件/excel/', table_name)

    create_excel_table(image_data, table_path)
    print("已创建图片尺寸表格:", table_path)


if __name__ == '__main__':
    input_path = input("请输入文件路径或文件夹路径:")
    process_images(input_path)
    
    
#添加检测:
# 新添加的代码
var = "hello"
print("type:", type(var))
print("value:", str(var))
#input("pause at line: {}".format(str(__fil e__.split("/")[-1])+": "+str(30)))
input("pause at line: {}".format(str(file.split("/")[-1]) + ": " + str(30)))
print("help:", help(type(var)))


꧂ 截图꧁

在这里插入图片描述

꧂错误信息 ꧁

❌❌❌❌❌❌❌❌❌❌❌

/data/user/0/org.qpython.qpy/files/bin/qpy thon3.sh "/storage/emulated/0/qpython/评论 截图问题1.矩阵2.1.2.1空行问题3.4.6色心6.6꧂ python图片:获得颜色占比,图片尺寸1.2保存表格1.1.py" && exit
比,图片尺寸1.2保存表格1.1.py" && exit   < 请输入文件路径或文件夹路径:/storage/emula ted/0/DCIM/1696948008360.pngTraceback (most recent call last):  File "/storage/emulated/0/qpython/评论截 图问题1.矩阵2.1.2.1空行问题3.4.6色心6.6꧂py thon图片:获得颜色占比,图片尺寸1.2保存表格1.1.py", line 117, in <module>    process_images(input_path)  File "/storage/emulated/0/qpython/评论截 图问题1.矩阵2.1.2.1空行问题3.4.6色心6.6꧂py thon图片:获得颜色占比,图片尺寸1.2保存表格1.1.py", line 111, in process_images    create_excel_table(image_data, table_p ath)  File "/storage/emulated/0/qpython/评论截 图问题1.矩阵2.1.2.1空行问题3.4.6色心6.6꧂py thon图片:获得颜色占比,图片尺寸1.2保存表格1.1.py", line 86, in create_excel_table    wb.save(table_path)  File "/data/user/0/org.qpython.qpy/files /lib/python3.11/site-packages/openpyxl/wor kbook/workbook.py", line 386, in save    save_workbook(self, filename)  File "/data/user/0/org.qpython.qpy/files /lib/python3.11/site-packages/openpyxl/wri ter/excel.py", line 291, in save_workbook    archive = ZipFile(filename, 'w', ZIP_D EFLATED, allowZip64=True)              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^  File "/data/user/0/org.qpython.qpy/files /lib/python3.11/zipfile.py", line 1281, in  __init__    self.fp = io.open(file, filemode)              ^^^^^^^^^^^^^^^^^^^^^^^PermissionError: [Errno 1] Operation not p ermitted: '/storage/emulated/0/代码文件/ex cel/图片尺寸表格 (2023-10-11 11:45:43).xls x'1|:/ $

꧂GPT给出解读信息 ꧁

这是一个权限错误。根据错误信息的提示,你尝试在 /storage/emulated/0 目录下创建或写入文件,但是没有足够的权限进行操作。

解决这个问题需要检查你的代码中是否存在访问受限的文件或目录,并将其修改为具有读写权限的目录。你可以尝试将表格保存到其他目录中,例如 /storage/emulated/0/Documents/storage/emulated/0/Download 等具有读写权限的目录。另外,还需要检查你的应用程序是否已经获得了足够的权限来访问这些目录。

最后,你可以通过给目录授权来解决此问题。例如,使用以下命令来将 /storage/emulated/0/代码文件/excel 目录的所有权和权限设置为当前用户:

chmod -R 777 /storage/emulated/0/代码文件/excel

这将允许你的代码在该目录中创建和写入文件。


http://www.niftyadmin.cn/n/5080137.html

相关文章

使用国内镜像站点下载Git安装包

CNPM Binaries Mirror (npmmirror.com)

区块链的两个核心概念之一签名, 另一个是共识.

Alice的公私钥&#xff0c; 签名和验证签名仅仅确定了Alice对数字资产A所有权的宣言. 之后, Bob也可以用自己的私钥对资产A进行签名宣誓所有权。区块链中叫双花&#xff0c;即重复宣称所有权&#xff0c; 也称重复花费交易。这时候需要共识算法(集体成员pow或委员会代表pos监督…

点向行列连边的网络流图优化成行列连边的二分图:CF1592F2

https://www.luogu.com.cn/problem/CF1592F2 做完F1&#xff0c;然后用1的结论来思考。 场上推了几个性质。首先op4的操作行列必然两两不同&#xff0c;所以op4最多 max ⁡ ( n , m ) \max(n,m) max(n,m) 次。然后手玩发现只有除 ( n , m ) (n,m) (n,m) 的三个格子都为1&am…

智能的风还是吹进了文字密集工作岗位里!文本审核一文看懂

文字密集工作出现在各个行业&#xff0c;如法律、金融、财务等等&#xff0c;此类工作中可能每天都要面对大量的文件、合同、文章等&#xff0c;需要在海量文档中寻找关键信息、提炼核心内容等&#xff0c;这是文本审核工具就派上很大的用场。IDP智能文本审核是一款可以有效帮助…

BUUCTF [GXYCTF2019]luck_guy

使用DIE查看文件信息 ELF64位文件 IDA64打开 这里读取输入&#xff0c;并且将输入传递给了patch_me函数 跟进 上面判断我们输入的数是否为奇数 偶数时进入get_flag函数 &#xff0c;这里不会传递任何参数 首先循环5次 然后匹配随机数 如果为1&#xff0c;输出这是flag 首…

layui tree监控选中事件,同步选中和取消

需求&#xff1a;需要分配权限时&#xff0c;要通过组织架构分配&#xff0c;也要通过角色分配&#xff0c;还是把选择的结果显示出来 结果如下图 代码分页面&#xff0c;类和SQL 页面&#xff1a; <% Page Language"C#" AutoEventWireup"true" Code…

变量提升的常见情况总结

什么叫变量提升? 把当前上下文中带有var(提升声明)/function(提升声明定义)进行提升的声明或者定义。变量提升是将变量声明提升到它所在作用域的最开始的部分。 全局上下文中:基于var/function声明的变量&#xff0c;也相当于给window设置了对应的属性。 实例 1 var t 1;…

PHP Discord获取频道消息功能实现

PHP Discord获取频道消息功能实现 1. 关注对应频道2. 添加机器人3. 配置机器人权限4. 使用 DiscordPHP 类库5. 代码示例 (Laravel 框架)6. 服务器部署 1. 关注对应频道 首先要创建自己的频道, 然后到对应的公告频道中关注这个频道(这时 Discord 会让你选择频道, 选择之前创建的…