python处理yaml、ini和execl文件

文章介绍了如何在Python中使用yaml库来读写YAML文件,包括读取简单和复杂结构的YAML数据,以及清空YAML文件的方法。此外,还涉及了读写INI配置文件和处理Excel数据的相关操作。

一、yaml的初步了解

YAML 是一个被广泛使用的数据序列化和配置语言,后缀可以为yaml或yml, 支持#注释,通过缩进表示层级,区分大小写,读取出来之后是一个字典列表
yaml 的用途:

  • 用于做配置文件 (yaml )
    在k8s集群中要使用kubectl部署一个应用,哪些应用都使用的yaml格式的文件
  • 用于编写自动化测试用例

yaml的数据组成:

  • map对象, 键:(空格)值
name: 晴雯
  • 数组(list),用‘’-‘’表示列表
mylist:
  - name1: 李白
  - name2: 杜甫
  - age:
      - libai: 55
      - dufu: 56

二、在python中处理yaml文件

1、用面向对象方法,将yaml的处理封装起来,在其他模块就可以直接使用
导入yaml库

import json
import random
import re
import yaml

class YamlUtil:
    '''
    本类是操作yaml文件的一些方法,包括读写,和解析yaml 中的随机数字和随机字符串
    '''

2、写一个读yaml的方法,该方法只读取只含有键值对的yaml,根据关键字读取出值,如:

name: 黛玉
age: 16
def read_simple_yaml(self,path,key):
        '''
        读取简单的yaml文件,只有键值对的,根据key返回值
        :param path: yaml文件路径
        :param key: 要查找的key值
        :return: 返回key对应的value值
        '''
        with open(path,mode='r',encoding='utf-8') as f:
            value = yaml.load(stream=f,Loader=yaml.FullLoader)
            return value[key]

3、这也是一个读取yaml的方法,改方法读取的是包含嵌套的yaml文件,一直把整个yaml内容都读取出来。如:

mylist:
  - name1: 李白
  - name2: 杜甫
  - age:
      - libai: 55
      - dufu: 56
def read_complex_yaml(self,path):
        '''
        读取复杂的yaml文件类容,比如有嵌套的,直接返回列表
        :param path: yaml文件的路径
        :return: 返回读取到的yaml内容
        '''
        try:
            with open(path,mode='r',encoding='utf-8') as f:
                value = yaml.load(stream=f,Loader=yaml.FullLoader)
                return value
        except:
            print("No such file or directory")

4、将内容写入到yaml中。

def write_yaml(self,path,data,mode=None):
        '''
        :param path: yaml文件路径
        :param data: 要写入yaml文件的数据
        :param mode: 写入的模式,不传默认是追加
        :return: 无返回值
        '''
        try:
            if mode == None:
                mode='a'
            else:
                mode = mode
            with open(path,mode=mode,encoding='utf-8') as f:
                yaml.dump(data=data,stream=f,allow_unicode=True)
        except:
            print("No such file or directory")

5、清空yaml的方法

def clear_yaml(self,path):
        '''
        清空yaml文件
        :param path: 要清空的yaml文件路径
        :return: 无返回值
        '''
        try:
            with open(path,mode='w',encoding='utf-8') as f:
                f.truncate()
        except:
            print("No such file or directory")

三:读写ini的文件

配置文件以ini结尾,如下图在这里插入图片描述
在这里插入图片描述
处理ini文件需要导入configparser
1、初始化对象,初始化给文件路径和要读取那个节点的,文件路径给了默认值,如果没有穿就去读默认的文件

#coding=utf-8
import configparser

class ReadIni(object):
    def __init__(self,file_name=None,node=None):
        if file_name == None:
            file_name = "F:\myfile\python\code\seleniumpython\config\LocalElement.ini"
        if node == None:
            self.node = "RegisterElement"
        else:
            self.node = node
        self.cf = self.load_ini(file_name)

2、加载文件

#加载文件
    def load_ini(self,file_name):
        cf = configparser.ConfigParser()
        cf.read(file_name)
        return cf

3、获取value值

 #获取value得值
    def get_value(self,key):
        data = self.cf.get(self.node,key)
        return data

四、处理execl文件

处理execl文件需要用到xlrd、xlutils.copy
1、初始化对象,传入文件路径,和index

#--coding:utf-8--

import xlrd
from xlutils.copy import copy
import time

class ExeclUtil(object):
	'''读取execl内容'''
	def __init__(self,file_path = None,index = None):
		self.file_path = file_path
		if self.file_path == None:
			self.file_path = "F:\\myfile\\python\\code\\selenium_project\\config\\casedata.xls"
		if index == None:
			index = 0
		self.data = xlrd.open_workbook(self.file_path)
		self.table = self.data.sheets()[index]

2、获取表中的数据,返回结果

def get_data(self):
		'''将表格中的数据读入到一个list中'''
		results = []
		rows = self.get_rows()
		if rows != None:
			for i in xrange(rows):
				col = self.table.row_values(i)
				results.append(col)
			return results
		else:
			return None

3、获取表中的行数

def get_rows(self):
		'''获取execl行数'''
		rows = self.table.nrows
		if rows >= 1:
			return rows 
		else:
			return None

4、获取单元格的数据

ef get_col_value(self,row,col):
		'''获取单元格数据'''
		if self.get_rows() > row:
			data = self.table.cell(row,col).value
			return data
		else:
			return None

5、给单元格写入数据

def write_value(self,row,col,value):
		'''给单元格写入数据'''
		read_value = xlrd.open_workbook(self.file_path)
		write_data = copy(read_value)
		write_data.get_sheet(0).write(row,col,value)
		write_data.save(self.file_path)
		time.sleep(2)
<think>我们正在处理用户关于“Python如何处理AI文件”的查询。根据引用内容,我们注意到引用[1]提到了一些Python人工智能库,引用[2]则详细介绍了Gym库。但是,用户的问题是关于“AI文件”的处理,这里需要澄清“AI文件”的含义。 在计算机领域,“AI文件”通常有两种可能的含义: 1. Adobe Illustrator文件(扩展名为.ai),这是一种矢量图形文件格式。 2. 与人工智能(Artificial Intelligence)相关的数据文件,如模型文件、数据集文件等。 由于用户的问题出现在人工智能上下文中,且引用了人工智能库,我们首先假设用户指的是人工智能相关的文件。但为了全面性,我们将同时覆盖两种可能性。 ### 可能性1:处理Adobe Illustrator (.ai) 文件 如果用户指的是Adobe Illustrator文件,那么我们需要使用能够解析操作矢量图形的库。 #### 推荐库: - **PyMuPDF (fitz)**:可以读取.ai文件(实际上是PDF的变种)并提取内容。 - **svgwrite**:如果要将.ai文件转换为SVG,可以使用此库。 - **ReportLab**:可以生成PDF,但读取.ai文件的能力有限。 #### 示例代码:使用PyMuPDF读取.ai文件 ```python import fitz # PyMuPDF def read_ai_file(file_path): doc = fitz.open(file_path) for page_num in range(len(doc)): page = doc.load_page(page_num) text = page.get_text("text") print(f"Page {page_num+1}:") print(text) # 注意:.ai文件可能包含复杂的矢量图形,提取文本可能不完整 ``` ### 可能性2:处理人工智能相关的文件 如果用户指的是人工智能相关的文件(如模型文件、数据集文件),那么根据文件类型的不同,处理方式也不同。 #### 常见的人工智能文件类型及处理库: 1. **数据集文件**(CSV, JSON, Excel, HDF5等) - `pandas`:用于处理表格数据,支持CSV、Excel、JSON等。 - `h5py`:用于处理HDF5格式的文件(常用于大型数据集)。 2. **图像数据集**(JPEG, PNG等) - `PIL/Pillow`、`OpenCV`:用于图像读取处理。 3. **模型文件**(不同框架有不同的保存格式) - **TensorFlow**:`.ckpt`(检查点),`.pb`(模型结构),`.h5`(Keras模型) - 使用`tensorflow.keras.models.load_model`加载.h5模型。 - **PyTorch**:`.pth`,`.pt` - 使用`torch.load`加载模型。 - **ONNX**:`.onnx` - 使用`onnxruntime`或`onnx`库加载运行模型。 - **Scikit-learn**:`.pkl`(通过`joblib`或`pickle`保存) - 使用`joblib.load`或`pickle.load`加载模型。 4. **配置文件**(YAML, JSON, INI等) - 使用标准库(如`json`、`configparser`)或第三方库(如`PyYAML`)读取。 #### 示例代码:加载不同类型的模型文件 **TensorFlow/Keras模型** ```python from tensorflow.keras.models import load_model model = load_model('model.h5') # 加载.h5文件 ``` **PyTorch模型** ```python import torch model = torch.load('model.pth') # 加载.pth文件 model.eval() # 设置为评估模式 ``` **Scikit-learn模型** ```python import joblib model = joblib.load('model.pkl') # 加载.pkl文件 ``` ### 总结 根据用户的问题,我们分两种情况讨论: 1. 如果用户指的是Adobe Illustrator文件,则使用`PyMuPDF`等库处理。 2. 如果用户指的是人工智能相关的文件(如模型、数据集),则根据具体文件类型选择相应的库(如`pandas`、`h5py`、`tensorflow`、`torch`、`joblib`等)。 由于问题上下文是人工智能,我们更倾向于第二种解释。但为了全面性,我们提供了两种情况的解决方案。 ### 相关问题 1. 如何判断一个文件是Adobe Illustrator文件还是人工智能模型文件? 2. 在Python中,如何读取解析ONNX模型文件? 3. 使用PyMuPDF处理.ai文件时,能否提取其中的矢量图形信息? 4. 在加载预训练模型时,如何避免安全风险(如恶意代码注入)?</think>### Python 处理 AI 文件的库与方法 #### 1. **理解 AI 文件类型** AI 文件通常指两种类型: - **Adobe Illustrator 文件**(矢量图形格式) - **人工智能相关文件**(模型权重、数据集、配置文件等) 以下按两种场景分别说明处理方法。 --- ### 一、处理 Adobe Illustrator (.ai) 文件 #### 📌 推荐工具库 1. **PyMuPDF (fitz)** - 功能:直接读取 .ai 文件(本质是 PDF 变种) - 安装:`pip install PyMuPDF` ```python import fitz doc = fitz.open("design.ai") for page in doc: text = page.get_text() # 提取文本 images = page.get_images() # 提取图像 ``` 2. **CairoSVG + svglib** - 功能:将 .ai 转为 SVG 再操作 - 安装:`pip install svglib cairosvg` ```python from svglib.svglib import svg2rlg from reportlab.graphics import renderPM drawing = svg2rlg("converted.svg") renderPM.drawToFile(drawing, "output.png", fmt="PNG") # 转为位图 ``` 3. **Inkscape 命令行** - 功能:通过系统调用转换格式 ```python import subprocess subprocess.run(["inkscape", "input.ai", "--export-filename=output.png"]) ``` --- ### 二、处理人工智能相关文件 #### 📌 模型权重文件 1. **PyTorch (.pt/.pth)** ```python import torch model = torch.load("model.pt") # 加载模型 torch.save(model.state_dict(), "new.pt") # 保存 ``` 2. **TensorFlow (.h5/.pb)** ```python from tensorflow import keras model = keras.models.load_model("model.h5") # 加载 Keras 模型 ``` 3. **ONNX 格式 (.onnx)** ```python import onnxruntime as ort session = ort.InferenceSession("model.onnx") outputs = session.run(None, {"input": input_data}) # 推理 ``` #### 📌 数据集文件 1. **图像数据集** ```python from PIL import Image import numpy as np img = Image.open("ai_data.png") # 支持 PNG/JPG 等 array = np.array(img) # 转为 NumPy 数组 ``` 2. **TFRecord 文件** ```python import tensorflow as tf dataset = tf.data.TFRecordDataset("data.tfrecord") ``` #### 📌 配置文件 (YAML/JSON) ```python import yaml with open("config.yaml") as f: params = yaml.safe_load(f) # 读取 AI 模型参数 import json with open("hyperparams.json") as f: data = json.load(f) ``` --- ### 三、综合建议 1. **优先确认文件类型** - 使用 `file` 命令或 Python 的 `magic` 库检测文件格式: ```python import magic print(magic.from_file("unknown.ai")) # 输出 "PDF document" 或 "PNG image" ``` 2. **矢量图形处理流程** ```mermaid graph LR A[AI文件] --> B{是否含文本} B -->|是| C[PyMuPDF提取文本] B -->|否| D[转SVG+svglib处理] D --> E[输出为PNG/PDF] ``` 3. **AI模型处理流程** ```mermaid graph LR F[模型文件] --> G{框架类型} G -->|PyTorch| H[torch.load] G -->|TensorFlow| I[tf.keras.models.load_model] G -->|ONNX| J[onnxruntime.InferenceSession] ``` --- ### 相关问题 1. 如何在不安装 Adobe Illustrator 的情况下批量转换 .ai 文件为 PNG? 2. 读取 PyTorch 模型时出现 `UnpicklingError` 如何解决? 3. 有哪些 Python 库可以编辑 SVG 矢量图形? 4. 如何处理包含敏感数据的 AI 模型文件的安全加载? 5. 如何从 .ai 文件中提取 CMYK 色彩信息? [^1]: 关于 Python 人工智能库的扩展资源 [^2]: Gym 库在强化学习中的应用场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javascript_good

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值