利用pandas将Excel单列数据拼接为带引号逗号分隔字符串
在处理包含几十万条数据的Excel表格时,常需将某一列(如代码ID)提取并拼接为特定格式的字符串,例如用于SQL语句的 IN 子句。本文介绍利用Python的 pandas 库读取指定列,并通过脚本将数据转换为 'value1','value2',... 格式的方法,提供完整可运行的源码及打包指南。
业务场景与需求分析
当面对包含大量数据的Excel文件时,手动处理单行数据拼接效率极低。常见的业务需求包括:
- 从包含几十万条记录的Excel中提取特定列的数据。
- 将提取的每个单元格数据用单引号包裹。
- 使用逗号作为分隔符,将所有数据拼接为一个长字符串。
- 最终结果需可直接用于数据库查询或代码生成。
虽然文本编辑器(如Sublime Text)支持通过 Ctrl+Shift+L 或 Alt+F3 进行多行批量编辑,但在处理大规模数据时,编辑器容易卡顿。编写自动化工具不仅能提高效率,还能避免人为操作错误。
核心实现逻辑
使用 pandas 读取Excel文件并处理数据的核心步骤如下:
- 读取指定列:使用
pandas.read_excel并通过usecols参数指定需要提取的列索引。 - 数据转换:将读取到的Sheet数据转换为列表格式,便于遍历。
- 循环拼接:遍历列表,过滤掉空值(
nan),并将每个元素转换为字符串,加上单引号和逗号。 - 结果输出:将拼接好的字符串写入文本文件。
关键代码片段
以下是处理数据的核心逻辑,展示了如何读取指定列并构建目标字符串:
sheet = pandas.read_excel(io=file_name, usecols=[line_num])
data = sheet.values.tolist()
str_data = ''
# 循环处理数据
print_msg('已获取列数据条数[' + str(len(data)) + '],开始处理数据……')
for x in range(len(data)):
if str(data[x][0]) != 'nan':
str_data += "'" + str(data[x][0]) + "',"注意:上述代码在循环末尾会多出一个逗号,因此在最终写入文件前需使用 strip(',') 去除末尾多余的逗号。
完整工具源码
以下脚本封装了完整的交互流程,包括文件存在性检查、列号合法性验证、数据处理及文件写入。脚本设计为命令行交互模式,并可通过 pyinstaller 打包为独立的可执行文件(exe),以便在无Python环境的机器上运行。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
拼接Excel表格单行数据,并写入文本
author: gxcuizy
time: 2021-03-01
"""
import pandas
import random
import os
import time
def print_msg(msg=''):
"""打印信息"""
now_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print('[' + now_time + '] ' + msg)
# 程序主入口
if __name__ == "__main__":
# 获取传入参数
file_name = input('请输入当前目录下的表格文件名(例如“01.xlsx”):')
line_num = input('请输入要拼装的数据第几列(例如“1”):')
# 判断文件是否存在
if os.path.exists(file_name) == False:
print_msg('文件不存在')
os.system("pause")
exit(0)
# 判断输入的行数是否为数字
if line_num.isdigit() == False:
print_msg('请输入列数的数字')
os.system("pause")
exit(0)
try:
# 获取表格数据
print_msg('开始获取文件[' + file_name + ']的第[' + str(line_num) + ']列数据')
line_num = int(line_num) - 1
sheet = pandas.read_excel(io=file_name, usecols=[line_num])
data = sheet.values.tolist()
str_data = ''
# 循环处理数据
print_msg('已获取列数据条数[' + str(len(data)) + '],开始处理数据……')
for x in range(len(data)):
if str(data[x][0]) != 'nan':
str_data += "'" + str(data[x][0]) + "',"
# 写入文本文件
print_msg('数据处理完毕,开始写入……')
random_num = random.randint(1000, 9999)
with open('str_' + str(random_num) + '.txt', 'w') as f:
f.write(str_data.strip(','))
print_msg('数据写入完毕.')
except Exception as err_info:
# 异常信息
print_msg(str(err_info))
# 防止exe程序执行结束闪退
os.system("pause")打包与运行指南
为了便于分发和使用,可以将上述Python脚本打包为Windows可执行文件(exe)。确保已安装 pyinstaller 库,然后执行以下命令:
pyinstaller -F -i favicon.ico join_excel_data.py参数说明:
-F:打包为单个可执行文件。-i favicon.ico:指定生成的exe文件的图标(可选)。
打包完成后,生成的exe文件位于 dist 目录下。用户只需双击运行,按照提示输入Excel文件名和列号即可生成结果文件。
注意事项
- 列号索引:脚本中用户输入的列号从1开始计数,代码内部已自动转换为从0开始的索引(
line_num = int(line_num) - 1)。 - 空值处理:代码显式判断了
'nan'字符串,跳过Excel中的空单元格,避免拼接出'nan'字符串。 - 文件命名:输出的文本文件名包含随机生成的4位数字,避免多次运行覆盖之前的结果。
- 依赖环境:运行脚本前需确保Python环境中已安装
pandas和openpyxl(pandas读取xlsx所需的引擎)。
以上就是利用pandas将Excel单列数据拼接为带引号逗号分隔字符串的详细内容,更多关于Python数据处理及Excel自动化操作的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













