基于tkinder与tksheet的CSV读取应用:通过循环将多列表合并为单一嵌套列表的实现咨询
解决CSV读取时多行列表合并为单一嵌套列表的问题
嘿,我看你现在的问题根源在于每次循环都把liste重写成了新的单行列表,完全没把之前的行内容保留下来对吧?要实现把所有符合条件的行收集成一个嵌套列表,只需要提前初始化一个空的总列表,然后把每个子列表追加进去就搞定了。
原代码问题分析
你的原代码里,每次进入if块都会重新定义liste,相当于每次都把之前的内容覆盖掉,所以最终只能得到单独的行输出,而不是所有行的集合:
import csv with open('my_csv_file.csv') as csvfile: reader = csv.reader(csvfile, delimiter=';') for row in reader: if row != '' and row[0].isdigit(): liste = [row[0], row[1], row[2], row[3], row[4]] print(liste)
修改后的代码
只需要加一步初始化总列表,再用append()方法把每个符合条件的子列表加进去就行:
import csv # 先初始化一个空的总列表,用来装所有子列表 final_list = [] with open('my_csv_file.csv') as csvfile: reader = csv.reader(csvfile, delimiter=';') for row in reader: # 这里把row != ''改成了row,因为csv.reader返回的空行是[]而非空字符串,判断更准确 if row and row[0].isdigit(): sub_list = [row[0], row[1], row[2], row[3], row[4]] final_list.append(sub_list) # 循环结束后再打印总列表,就是你要的嵌套结构了 print(final_list)
额外小优化
- 变量名改成了
final_list和sub_list,比原来的liste更直观,后期维护也方便 - 修正了空行的判断逻辑,更适配
csv.reader的返回规则
现在运行代码,就能得到你期望的输出:
[['AAA', 'AAA', 'AAA', 'AAA', 'AAA'], ['BBB', 'BBB', 'BBB', 'BBB', 'BBB'], ['CCC', 'CCC', 'CCC', 'CCC', 'CCC']]
内容的提问来源于stack exchange,提问作者Quentin
相关产品推荐
相关产品推荐

