如何检查CSV文件指定列数值并跳过末尾不固定数量的无关行
问题原因
csv.reader本质是迭代器对象,不支持列表的切片语法,所以你写的reader[1:-8]会直接报错,这是之前代码运行失败的核心原因。- 无需提前获知CSV总行数,也不用固定跳过最后8行,直接根据有效行的特征做过滤即可:你给出的有效数据行第4列(索引为3)都是可转换为整数的数字,而末尾无效行的对应位置是
f1-score这类非数字字符串,我们可以利用这个特征过滤无效行。
可用解决方案
直接在遍历的时候做异常捕获+合法性判断即可,修改后代码如下:
import ctypes import csv with open('data.csv') as csv_file: reader = csv.reader(csv_file) next(reader) # 跳过表头 for row in reader: # 先判断第4列是否能转成整数,不能就直接跳过这行(对应末尾无效行) try: col3_val = int(row[3]) except (ValueError, IndexError): continue # 走到这里说明是有效行,再做数值判断 if col3_val >=5: print(row) mymessage = 'A message' title = 'Popup window' ctypes.windll.user32.MessageBoxA(0, mymessage.encode('gbk'), title.encode('gbk'), 0)
补充说明:额外加了
IndexError捕获是为了过滤可能出现的空行、列数不足的异常行;如果你的系统弹窗出现乱码,可以把MessageBoxA换成MessageBoxW,去掉.encode('gbk')的部分即可。
内容的提问来源于stack exchange,提问作者Emma Lim
相关产品推荐
相关产品推荐

