Python处理CSV提取连续序列时报字符串拼接错误及replace异常
问题解决方法
问题1 类型报错修复
原因:从CSV读取的所有内容默认是字符串格式,直接进行算术运算s+1时会触发字符串和整数拼接的类型错误。
解决方法:提取CSV内容后统一转换为整数类型再传入ranges函数。
问题2 字符串冗余修复
原因:
- 直接将
csv.reader返回的行列表整体转字符串拼接,本身就会带出列表自带的[、'等符号,属于完全没必要的冗余操作 - 循环中的
str1.split("]",-1)没有赋值给变量,执行后不会生效 - 最终分割后的列表会残留空字符串元素,没有过滤
解决方法:跳过字符串拼接替换的冗余流程,直接从读取的CSV结果里提取数值,简化处理逻辑。
修复后完整代码
import csv def ranges(nums): nums = sorted(set(nums)) gaps = [[s, e] for s, e in zip(nums, nums[1:]) if s+1 < e] edges = iter(nums[:1] + sum(gaps, []) + nums[-1:]) # 按预期格式返回结果 return [f"{s},{e}" for s, e in zip(edges, edges)] # 读取源CSV提取数值 nums = [] with open('Book1.csv', newline='') as f: reader = csv.reader(f) for row in reader: # 跳过空行,将每行数字转整数 if row and row[0].strip().isdigit(): nums.append(int(row[0].strip())) # 生成连续区间结果 result = ranges(nums) print(result) # 输出到新CSV文件 with open('output.csv', 'w', newline='') as f: writer = csv.writer(f) for item in result: writer.writerow([item])
使用示例中1、5、6、7、8的输入测试,会直接返回预期的['1,1','5,5','6,8']结果。
内容的提问来源于stack exchange,提问作者Sajanpreet Singh
相关产品推荐
相关产品推荐

