使用Python批量处理Excel的内容

958a05bcc1f7f46efed81f3059ce8abc.gif

正文共:1500 字 10 图,预估阅读时间:1 分钟

在前面的文章中如何使用Python提取Excel中固定单元格的内容,我们介绍了如何安装Python环境和PyCharm工具,还利用搭好的环境简单测试了一下ChatGPT提供的脚本程序。

简单回顾一下上次的操作过程:

首先,我们创建了一个记事本新文件;然后,将ChatGPT提供的示例代码复制粘贴到了文件中;接着,保存文件并将文件名后缀改为了.py,并直接双击运行此文件;接下来,在打开的PyCharm工具中,我们尝试执行了脚本,主要报错是缺少对应的Python库和依赖关系。

340aa490d7ec74279a8458b8de5b2639.png

对于缺少的组件,我们在PyCharm的顶部菜单中,选择“File”下的“Settings”打开设置对话框;然后选择“Project”下的“Project Interpreter”,单击项目解释器列表上方的 “+”按钮来添加新的Python包,在弹出的对话框中,搜索“pandas”“openpyxl”,单击“Install Package”按钮,等待安装完成。

Pandas是一个用于数据分析的强大Python库,它提供了各种数据结构和数据操作工具,可以轻松地进行数据处理、清洗和分析等任务。它有一个依赖包,那就是openpyxl,主要用于读写Excel文件,有了openpyxl,我们就可以使用Pandas库来读取和比较Excel文件了。

最后,我们终于执行成功,读取到了Excel中的单元格数据。

9361b226a4323053d1943b494e07b89b.png

当然,在上个脚本中,我有点不满意的地方,那就是设置单元格的行号和列号有点不符合常规逻辑。

# 设置需要提取的单元格行号和列号
row_index = 1
col_index = 1

9b4e53c9c69bf78a5a822617caf07f0a.png

当我们需要读取B2的数据时,需要将行号设置为1、列号设置为1。同时,输出的数据格式也稍微有点简单,今天我们来对脚本做一个简单升级。

我们可以使用cell_positions来选择多个不连续的单元格,像下面这样:

# 定义要提取的单元格位置
cell_positions = {
  'name': 'B2',
  'phone': 'B3',
  'address': 'B4',
  'serv': 'B5'
}

注意,这里的单元格可以使用我们所熟悉的单元格格式B2;不同单元格之间的逗号不能省略。

然后就是路径问题,Windows的中文环境中经常会包含一些特殊字符,比如汉字、数字或者空格等,经常会出现识别错误。

43263fa8ebf3b5a33cb53e735a447f10.png

这里我们用了一个1月份来命名文件夹,但是这里做了一个转义,转换成了特殊字符,导致操作系统无法正确解析文件路径,进而导致读取文件失败。

a70ed735f716dc564be7598e3afb0107.png

虽然没有报错,但是我们可以看到它没有读到任何文件。

对于这类不合法的文件路径,可能是包含了Windows不支持的特殊字符或者非法字符,还有可能是路径名过长等原因。该问题一般有以下几种方法解决方案:

1、修正文件路径:检查您的文件路径是否包含了非法字符或者过长的路径名,如果有,将其修改为合法的路径;

2、使用原始字符串表示法:将文件路径使用原始字符串表示法(在字符串前面加上r或R)来避免转义字符和特殊字符的影响。

3、使用os.path.join函数构造文件路径:该函数会自动处理不同操作系统的路径分隔符,并确保生成的路径是合法的。

这里我是用了最常用的第2种解决方案,在在字符串前面加上r之后,检查就没有错误了。

69a8b1ab0d7f7c073a9e04209d866045.png

对于该目录下的子目录,我们可以使用os.walk()函数来遍历指定文件夹下的所有文件和子文件夹,并逐个读取Excel文件。这里可以直接指定,也可以使用前面通过folder_path定义的文件夹路径变量。

5f77c2aba9ae0f3fe3a476f1fb32f3cd.png

最后,如果我们要将提取的内容保存到一个文本文件中,也可以使用Python的文件操作来打开指定文件并写入。

8e106164684208362f5e0c01fba60db9.png

在上面的代码中,我们首先使用with open()语句打开要写入的文件,并使用'w'参数将打开文件的模式指定为写入模式。然后,在遍历文件夹和读取Excel文件时,我们将提取的内容写入到该文件中。具体来说,我们在遍历每个Excel文件时,将文件路径和提取的值写入到文件中,并在每个Excel文件处理完后,在文件中添加一个空行。

最后,整合一下,我们就得到了完整的脚本。

import os
import openpyxl
# 定义要提取的单元格位置
cell_positions = {
  'name': 'B2',
  'phone': 'B3',
  'address': 'B4',
  'serv': 'B5'
}
# 定义要处理的文件夹路径
folder_path = 'C:\python-test'
# 打开文件,准备写入提取的内容
with open(r'C:\python-test\result.txt', 'w', encoding='utf-8') as f:
  # 遍历指定文件夹下的所有 Excel 文件
  for root, dirs, files in os.walk(folder_path):
    for filename in files:
      # 仅处理 Excel 文件
      if filename.endswith('.xlsx'):
        file_path = os.path.join(root, filename)
        print(f"正在处理文件: {file_path}")
        # 打开 Excel 文件
        workbook = openpyxl.load_workbook(file_path)
        # 选择工作表
        sheet = workbook.active
        # 提取指定单元格的值
        values = {}
      for position in cell_positions:
        cell = sheet[cell_positions[position]]
        values[position] = cell.value
      # 将提取的值写入文件
      f.write(f"文件路径: {file_path}\n")
      for key, value in values.items():
        f.write(f"{key}: {value}\n")
      f.write('\n')

运行看一下效果。

a741532fa09373d4e6b3cb5f5fca96e8.png

因为print()函数中我们没有再显示结果数据,所以仅显示了文件信息。然后我们打开记事本文件看一下。

25e5c85993d08c87628a10aa0039bf28.png

OK,达到测试目的。

a1eb7c377ff8ac99a31d2f66cb57520d.gif

长按二维码
关注我们吧

045cf192782c663159403bcbed42a838.jpeg

8f040098dc1f559c3e26d806e76092e7.png

如何使用Python提取Excel中固定单元格的内容

配置openVPN使用用户名密码认证

解决openVPN的递归路问题还是要从服务器端下手

openVPN客户端连接指南

Ubuntu系统如何连接或断开openVPN

在SD-WAN网络中应用OpenVPN,chatGPT是这样想的

基于CentOS部署SmartDNS

chatGPT又火了,用openAI写文章到底靠不靠谱?

DDNS配置详解

DDNS如何应用到SD-WAN网络中?

家庭宽带的公网IPv4地址到底封了多少端口?

用SNMP模仿Zabbix读取设备接口流量

CentOS 7多网卡配置(最小化安装)

相关推荐

  1. VBA 批量处理Excel文件

    2024-06-10 11:20:04       13 阅读
  2. Excel内容批量生成个人加水印Word文档

    2024-06-10 11:20:04       24 阅读
  3. python——处理excel常用库

    2024-06-10 11:20:04       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-10 11:20:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-10 11:20:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-10 11:20:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-10 11:20:04       18 阅读

热门阅读

  1. 列举常见的SQL语句

    2024-06-10 11:20:04       10 阅读
  2. 谈谈 Tomcat 连接器

    2024-06-10 11:20:04       7 阅读
  3. 2024年城市客运安全员考试题库及答案

    2024-06-10 11:20:04       9 阅读
  4. Redis 的一些关键知识点及示例

    2024-06-10 11:20:04       9 阅读