Python读取CSV文件并将每行按3个字段分组存入数组的实现问题
现有代码存在的问题
- 字段未清理空白:csv读取的字段会保留原文件里的前后空白字符,比如
aa、a1这类内容拼接后会出现不符合预期的多余空格 - 冗余的list转换:rows本身已经是转换完成的列表,
len(list(rows))、len(list(rows[line]))不需要额外套list() - 内层循环次数错误:一行有9个字段的场景下,内层循环会执行9次,每次索引+3,到第4次循环时索引就会超过列表长度,触发
IndexError报错 - 结果列表初始化位置错误:每次内层循环都重新初始化t列表,导致每次只能存储当前分组,无法保留同一行的全部分组结果
- 拼接逻辑不符合要求:直接用+拼接字段,没有插入空格,输出结果是
aaa11而非要求的aa a1 1 - 索引控制冗余:不需要同时维护i/j/k三个变量,单变量控制步长即可简化逻辑
正确实现代码
import csv result = [] with open('Test.csv', encoding='utf-8') as csv_file: csv_reader = csv.reader(csv_file) for row in csv_reader: # 先对每个字段去除前后空白 cleaned_row = [field.strip() for field in row] # 按步长3分组,拼接成空格分隔的字符串 row_groups = [] for i in range(0, len(cleaned_row), 3): # 取i到i+3的三个元素,用空格拼接 group = ' '.join(cleaned_row[i:i+3]) row_groups.append(group) result.append(row_groups) print(row_groups)
执行后输出结果符合要求:
['aa a1 1', 'bb b1 11', 'cc c1 111'] ['aa2 a2 2', 'bb2 b2 22', 'cc2 c2 222'] ['aa3 a3 3', 'bb3 b3 33', 'cc3 c3 333']
内容的提问来源于stack exchange,提问作者Kitaro Asda
相关产品推荐
相关产品推荐

