题目:
编写一个程序来执行与前一个程序相反的任务。该程序应该打开一个电子表格,将列 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中所有元素转换为字符串
扫描二维码关注公众号,回复:
16143366 查看本文章