如何使用Python-jira不下载文件读取Jira的Excel/CSV附件内容?
实现方法
完全可以通过直接读取附件的字节流来实现,无需将文件保存到本地。核心思路是利用python-jira获取附件的原始字节内容,再通过BytesIO将其包装为类文件对象,最后用pandas直接读取为DataFrame。
前置依赖安装
先确保安装所需的包:
pip install python-jira pandas openpyxl xlrd
openpyxl用于读取.xlsx格式文件xlrd用于读取.xls格式文件(注意:xlrd 2.0及以上版本不再支持.xlsx,若只处理.xlsx可只装openpyxl)
代码实现示例
from jira import JIRA import pandas as pd from io import BytesIO # 初始化Jira连接(根据你的认证方式调整,这里用基础认证) jira = JIRA( server="https://your-jira-instance.com", basic_auth=("your-username", "your-api-token-or-password") ) # 获取目标工单(替换为你的工单KEY,比如PROJ-456) issue = jira.issue("PROJ-456") # 遍历并处理工单中的附件 for attachment in issue.fields.attachment: # 处理CSV附件 if attachment.filename.lower().endswith(".csv"): # 获取附件字节流 raw_content = attachment.get() # 直接读取为DataFrame csv_df = pd.read_csv(BytesIO(raw_content)) print(f"已读取CSV附件: {attachment.filename}") print(csv_df.head()) # 处理Excel附件(支持.xlsx和.xls) elif attachment.filename.lower().endswith((".xlsx", ".xls")): raw_content = attachment.get() # 根据文件后缀选择对应的引擎 engine = "openpyxl" if attachment.filename.lower().endswith(".xlsx") else "xlrd" excel_df = pd.read_excel(BytesIO(raw_content), engine=engine) print(f"已读取Excel附件: {attachment.filename}") print(excel_df.head())
关键说明
attachment.get()方法会直接返回附件的二进制内容,无需写入本地文件BytesIO将字节流转换为pandas可识别的类文件对象,实现"无文件"读取- 若只需处理特定附件,可通过
attachment.filename进行筛选(比如指定文件名)
内容的提问来源于stack exchange,提问作者timo
相关产品推荐
相关产品推荐

