Python读取CSV调用Jira REST API遇行取值异常求助
问题解决:正确读取无表头CSV并调用Jira API上传附件
核心错误分析
你的代码存在几个关键问题,导致无法正确获取行数据:
- 未使用csv.reader解析数据:你初始化了
datareader却直接用csvfile.readlines()循环,读出来的row是整行字符串,而非CSV分割后的列表。比如第一行TDEVOPST-5,E:\\Upload-PM\\att.csv,row[0]取的是第一个字符T,而非你需要的TDEVOPST-5。 - 文件打开模式错误:Python3中
csv.reader需要文本模式('r'),而非二进制模式('rb'),否则会引发编码或解析异常。 - 缺失requests模块导入:代码中调用了
requests.post但未导入requests,运行时会直接报错。 - URL拼接格式错误:用
str({row[0]})会把内容转成集合格式(比如{'T'}),导致URL拼接结果异常。
修正后的代码
import csv import requests # 新增requests模块导入 filename1 = 'E:\\Upload-PM\\attachment.csv' # 以文本模式打开文件,指定编码(根据你的文件实际编码调整) with open(filename1, 'r', encoding='utf-8') as csvfile: datareader = csv.reader(csvfile) # 直接循环datareader,每次获取分割后的列表行数据 for row in datareader: # 直接使用row[0]拼接URL,无需多余格式转换 urlvalue = f"https://<url>.atlassian.com/rest/api/3/issue/{row[0]}/attachments" print(urlvalue) headers = {"X-Atlassian-Token": "nocheck"} # 用with语句管理文件,避免资源泄漏 with open(row[1], 'rb') as file_obj: files = {'file': file_obj} r = requests.post(urlvalue, auth=('<email>','<token>'), files=files, headers=headers) print(r.status_code) print(r.text)
额外优化建议
- 增加异常捕获:比如处理文件不存在、API调用失败、CSV行格式错误等情况,避免程序直接崩溃。
- 若CSV文件存在空行,可在循环中增加判断:
if not row: continue,跳过无效行。
内容的提问来源于stack exchange,提问作者Annadate Piyush
相关产品推荐
相关产品推荐

