Python读取CSV提交JSON时,序列号被包裹为列表的问题求助
Python读取CSV提交JSON时,序列号被包裹为列表的问题求助
嘿,我来帮你搞定这个问题!
你猜的没错,那些方括号确实说明row是个列表,问题根源在csv.reader的行为上——它会把CSV的每一行都解析成一个列表,哪怕这一行只有一个值。比如你CSV里的serial1,csv.reader读出来的不是字符串"serial1",而是单元素列表["serial1"],所以你把row直接塞进{"sn": row}里,自然就变成了{"sn": ["serial1"]}这种格式啦。
给你几个简单的解决办法,随便选一个都能搞定:
方法1:直接取列表的第一个元素
在构造请求JSON的时候,把row改成row[0],直接拿到列表里的字符串:
data = {"sn": row[0]} # 把原来的row换成row[0]
这样提交的就是纯字符串序列号了,完全符合接口要求的格式。
方法2:读取CSV时就处理成字符串列表
如果不想在请求的时候再处理,也可以在读取CSV的环节就把列表转成字符串:
with open('serials.csv', mode='r') as infile: reader = csv.reader(infile) # 遍历每一行,取第一个元素存成字符串列表 serials = [row[0] for row in reader]
这样后面循环的时候,row本身就是纯字符串,直接data = {"sn": row}就没问题。
额外小技巧:更简单的读取方式
因为你的CSV每行只有一个值,其实不用csv.reader也行,直接用普通文件读取更省事:
with open('serials.csv', mode='r') as infile: # 读取所有行,自动去掉换行符和前后空白,还能跳过空行 serials = [line.strip() for line in infile if line.strip()]
这种方式读出来的直接就是干净的字符串列表,完全不会有嵌套列表的烦恼~
你试试上面的方法,应该就能顺利提交正确格式的JSON啦!
备注:内容来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

