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

news2024/11/14 20:40:28

꧂问题最初 ꧁

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单元格。例如:

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.coloradmin.cn/o/1079799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构-----哈夫曼树和哈夫曼编码

目录 前言 哈夫曼树的实现 1.储存结构 2.创建初始化哈夫曼树 3.完整哈夫曼树创建 4.计算总权值 哈夫曼编码 完整代码 前言 前面我们学习过了哈夫曼树和哈夫曼编码的基础知识&#xff08;链接&#xff1a;哈夫曼树哈夫曼编码必知必会知识_Gretel Tade的博客-CSDN博客&…

内排序算法

排序算法是面试中常见的问题&#xff0c;不同算法的时间复杂度、稳定性和适用场景各不相同。按照数据量和存储方式可以将排序算法分为 内排序&#xff08;Internal Sorting&#xff09;和 外排序&#xff08;External Sorting&#xff09;。 内排序是指对所有待排序的数据都可…

wifi管理软件 WiFi Signal mac中文介绍

WiFi Signal mac是一款WiFi信号强度监测工具&#xff0c;它可以帮助用户实时监测WiFi信号的强度、频率、噪声等信息&#xff0c;并提供详细的图表和统计数据。 WiFi Signal可以自动扫描附近的WiFi网络&#xff0c;并显示它们的信号强度和频率。用户可以通过WiFi Signal来找到最…

Android斩首行动——应用层开发Framework必知必会

前言 相信做应用层业务开发的同学&#xff0c;都跟我一样&#xff0c;对Framework”深恶痛绝“。确实如此&#xff0c;如果平日里都在做应用层的开发&#xff0c;那么基本上我们很少会去碰Framework的知识。但生活所迫&#xff0c;面试总是逃不过这一关的&#xff0c;所以作为…

第二证券:A股公司首批三季报出炉 柏楚电子、平煤股份业绩一增一减

10月10日晚&#xff0c;柏楚电子、平煤股份拉开了A股公司三季报发表序幕。来自激光切开控制体系赛道的柏楚电子&#xff0c;前三季度营收、净利润均完结较大崎岖增加&#xff1b;焦煤龙头企业平煤股份&#xff0c;受煤价跌落连累成果&#xff0c;前三季度营收、净利润均有所下降…

Java架构师缓存性能优化

目录 1 缓存的负载策略2 缓存的序列化问题3 缓存命中率低4 缓存对数据库高并发访问5 缓存数据刷新的策略6 何时写缓存7 批量数据来更新缓存8 缓存数据过期的策略9 缓存数据如何恢复10 缓存数据如何迁移11 缓存冷启动和缓存预热1 缓存的负载策略 如果说我们在缓存架构设计当中啊…

优思学院|八大浪费深度剖析

在工作流程中消除浪费是精益思想的目标。在深入探讨八大浪费之前&#xff0c;了解浪费的定义至关重要。浪费是指工作流程中的任何行动或步骤&#xff0c;这些行动或步骤不为客户增加价值。换句话说&#xff0c;浪费是客户不愿意为其付费的任何过程。 最初的七大浪费&#xff0…

第83步 时间序列建模实战:Catboost回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍Catboost回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndr…

Nerf 学习笔记

Nerf 学习笔记 Step 1&#xff1a;相机 Rays 行进(ray marching)Step 2&#xff1a;收集查询点Step 3&#xff1a;将查询点投射到高维空间(位置编码)Step 4&#xff1a;神经网络推理和体渲染神经网络推理体渲染计算损失 Reference: 搞懂神经辐射场 Neural Radiance Fields (Ne…

如何在一个传统的html中,引入vueJs并使用vue复制组件?

如何在一个传统的html中&#xff0c;引入vueJs并使用vue复制组件&#xff1f; 1.1 引言1.2 背景1.3 解决方案1.3.1 解决方案一&#xff1a;直接使用clipboard(不推荐仅供参考学习)1.3.2 解决方案二&#xff1a;封装指令js库后使用 (推荐) 1.1 引言 这篇博文主要分享如何在一个…

Springboot给每个接口设置traceId,并添加到返回结果中

原理 slf4j有个MDC的类&#xff0c;是ThreadLocal的实现&#xff0c;保存在这里的变量会绑定到某个请求线程&#xff0c;于是在该请求的线程里的日志代码都可以使用设入的变量。 实现 一、引入依赖 这个是可选项&#xff0c;用于生成唯一uid&#xff0c;我人懒&#xff0c…

一文带你了解 Linux 的 Cache 与 Buffer

目录 前言一、Cache二、Buffer三、Linux 系统中的 Cache 与 Buffer总结 前言 内存的作用是什么&#xff1f;简单的理解&#xff0c;内存的存在是为了解决高速传输设备与低速传输设备之间数据传输速度不和谐而设立的中间层&#xff08;学过计算机网络的应该都知道&#xff0c;这…

【实战】kubeadmin安装kubernetes集群

文章目录 前言服务器介绍准备工作设置服务器静态ip修改host关闭防火墙和swap修改所需的内核参数 部署步骤安装containerd安装cri工具&#xff08;效果等同于docker&#xff09; 安装kubernetes集群安装网络插件flannel安装可视化面板kuboard&#xff08;可选&#xff09; 下期预…

42. QT中开发Android配置QFtp功能时遇到的编译问题

1. 说明 此问题仅适用在QT中开发Android程序时&#xff0c;需要适用QFtp功能的情况。一般情况下&#xff0c;如果开发的是Windows或者Linux系统下的程序&#xff0c;可能不会出现该问题。 2. 问题 【Android】在将QFtp的相关代码文件加入到项目中后&#xff0c;编译项目时会…

sql server判断两个集合字符串是否存在交集

sql server判断字符串A101;A102和字符串A102;A103是否存在交集 我们编写两个函数&#xff1a; 1&#xff09;函数fn_split将字符串拆分成集合 create function [dbo].[fn_split](inputstr varchar(8000), seprator varchar(10)) returns temp table (Result varchar(200)) a…

TCP/IP(七)TCP的连接管理(四)全连接

一 全连接队列 nginx listen 参数backlog的意义 nginx配置文件中listen后面的backlog配置 ① TCP全连接队列概念 全连接队列: 也称 accept 队列 ② 查看应用程序的 TCP 全连接队列大小 实验1&#xff1a; ss 命令查看 LISTEN状态下 Recv-Q/Send-Q 含义附加&#xff1a;…

2785323-77-3,MAL-Alkyne,双功能连接试剂Alkyne maleimide

炔烃马来酰亚胺&#xff0c;Alkyne maleimide,MAL-Alkyne是一种非常有用的双功能连接试剂&#xff0c;可以在生物分子中发挥重要的作用。它的马来酰亚胺基团可以与生物分子中的硫醇基团反应&#xff0c;形成共价键&#xff0c;从而将生物分子与炔烃连接起来。这种连接方式在生物…

React的类式组件和函数式组件之间有什么区别?

React 中的类组件和函数组件是两种不同的组件编写方式&#xff0c;它们之间有一些区别。 语法和写法&#xff1a;类组件是使用类的语法进行定义的&#xff0c;它继承自 React.Component 类&#xff0c;并且需要实现 render() 方法来返回组件的 JSX。函数组件是使用函数的语法进…

Linux|qtcreator编译可执行程序双击运行

qt GUI window移植到linux参见&#xff1a;VS|vs2017跨平台编译linux&&CConsole&&QtGUI 参考&#xff1a;QtCreator修改项目的生成目录 文章目录 双击.pro文件&#xff0c;点击configureproject构建项目切换到release模式下双击打开pro文件&#xff0c;修改依赖…