Python读取csv错误

本文记录了在使用Python读取CSV数据时,如何正确判断字段是否有值以避免多线程环境中出现的问题。错误的使用dict.get('x')可能导致请求长度与原始输入不一致,进而使结果错乱。解决方案是使用dict.get('x', 'default')来确保即使字段为空,请求长度也会保持一致。" 109784407,9580424,力扣刷题心得与C++解法,"['算法', 'C++', '力扣', '编程题']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天改bug改了一下午,一个很简单的细节,却很容易被忽视,特记录一下。

在用python读取csv数据时,如果想判断某一个字段是否有值,可以写成:

reader = csv.Dicteader(inputFile)
tmp_lst = []
for row in reader:
	if row.get('xxx):
		tmp_list.append(row['xxx'])

这样写,如果是多线程调用服务并接受返回值的话,可能会引起很大的问题,例如

#将调服务的返回值加到输入中
def cpAttr(e={}, ne={}):
    try:
        for k, v in ne.items():
            e[k] = v.encode('utf-8')
    except Exception as ex:
        pass
#线程调用的函数
def handle(data_list, thread_name):
    p = []
    for e in data_list:
        if e.get('a') :
            p.append(e['a'])
    ps = {'splits': p}
    data = json.dumps(ps)
    url = "xxx"
    req = urllib2.Request(url=url, data=data, headers=headers)
    response = urllib2.urlopen(req)
    resp = response.read()
    results = json.loads(resp)
    for i in range(len(data_list)):
        cpAttr(data_list[i], results[i])

如果这里用 if dict.get(‘x’)来判断字典是否有值,就会有问题,因为如果这一字段是空值就不会被加入到请求的json中,也就是说请求长度跟原始输入长度不一致,就会导致输出结果全部错乱,所以这里应该写成:

def handle(data_list, thread_name):
    p = []
    for e in data_list:
    	#要判断不为空值
        if e.get('a') is not None :
            p.append(e['a'])
    ps = {'splits': p}
    data = json.dumps(ps)
    url = "xxx"
    req = urllib2.Request(url=url, data=data, headers=headers)
    response = urllib2.urlopen(req)
    resp = response.read()
    results = json.loads(resp)
    for i in range(len(data_list)):
        cpAttr(data_list[i], results[i])

ps. python的csv模块可能有内部的优化,如果只单独读一列并且有空值并按照错误的写法不会报错,而是会自动把一行全为空的自动删除掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值