Python编程快速上手第13章实践项目13.14.5电子表格到文本文件

题目:

编写一个程序来执行与前一个程序相反的任务。该程序应该打开一个电子表格,将列 A中的单元格写入一个文本文件,将列B中的单元格写入另一个文本文件,以此类推。

本文是基于Windows11 Python3.11来编写程序。

使用Openpyxl库编写的完整代码如下:

import openpyxl, os

# 定义电子表格文件名和输出文件夹路径
fileName = 'example.xlsx'
output_folder = r'C:\path\to\your'    # 你的电脑上程序目录路径

srcFile = os.path.join(output_folder, fileName)

# 加载电子表格
wb = openpyxl.load_workbook(srcFile, data_only=True)
sheet = wb.active

# 确保输出文件夹存在
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 遍历每一行,并将内容写入对应的文本文件
for col in range(1, sheet.max_column + 1):
    textFile = os.path.join(output_folder, f"Column{col}.txt")    # 文本文件的路径及文件名
    with open(textFile, 'w') as f:
        for row in range(1, sheet.max_row + 1):
            cell_value = sheet.cell(row=row, column=col).value
            if cell_value:
                f.write(str(cell_value) + '\n')

其中写模式'w'也可以根据情况改为附加模式'a',以免覆盖了文件原来的内容。

同时,此代码将保留电子表格中的每一行,包括表头。

若是表格文件比较大,则先将表格数据存储到列表中,然后一次写入所有列,这样可以减少磁盘I/O操作的数量,使程序运行时间缩短。

还有一种更简单的方法,就是使用pandas库来实现。完整代码如下:

import pandas as pd
import os

# 定义电子表格文件名和输出文件夹路径
fileName = 'example.xlsx'
output_folder = r'C:\path\to\your'    # 你的电脑上程序目录路径

srcFile = os.path.join(output_folder, fileName)

# 读取电子表格
df = pd.read_excel(srcFile, header=None)    # 去除header=None则不保留表头

# 确保输出文件夹存在
if not os.path.exists(output_folder):
    makedirs(output_folder)

# 遍历每一列,并将内容写入对应的文本文件
for i, column in enumerate(df.columns):
    values = df[column].tolist()    # 将该列所有单元格的值都加入到列值列表values中

    # 写入每列的值到单独的文本文件
    textFile = os.path.join(output_folder, f"{i}.txt")
    with open(textFile, 'w') as f:
        f.write('\n'.join(str(value) for value in values)    # 用列表推导式将values中所有元素转换为字符串

猜你喜欢

转载自blog.csdn.net/shufenanbei/article/details/131072263