Cinema 4D项目Python脚本如何从CSV文件选取指定行提取数据
你只需要新增一个目标行号的配置,遍历到对应行时读取数据后直接终止循环即可,同时补充行号不存在的异常处理避免报错。
修改后的完整代码如下:
import c4d import csv # 配置你需要读取的目标数据行号,默认按【表头后第1行数据为1】的规则计数,可自行修改数值 TARGET_DATA_ROW = 2 def main(): path = Spreadsheet #Spreadsheet是输入的文件路径参数 # 初始化输出变量默认值,避免行不存在时报未定义错误 Xcord = Ycord = Langle = Lspeed = 0.0 with open(path, 'rb') as csv_file: readed = csv.DictReader(csv_file, delimiter=',') # 遍历行时匹配目标行 for i, row in enumerate(readed): # enumerate索引从0开始,所以目标行号减1就是对应索引 if i != TARGET_DATA_ROW - 1: continue try: Xcord = float(row["hc_x"]) Ycord = float(row["hc_y"]) Langle = float(row["launch_angle"]) Lspeed = float(row["launch_speed"]) # 读取到目标行后直接终止循环,不需要继续读取后续行 break except: print "目标行读取失败 - {}".format(row) break else: # 循环正常结束没有触发break,说明目标行号超出CSV总行数 print "指定的行号{}不存在,CSV共{}行有效数据".format(TARGET_DATA_ROW, i+1) global Output1 global Output2 global Output3 global Output4 Output1 = Xcord Output2 = Ycord Output3 = Langle Output4 = Lspeed
修改说明:
- 新增了
TARGET_DATA_ROW配置项,你直接修改这个数值就能指定要读取的行,如果你需要按「索引从0开始」的规则计数,直接把判断条件改成i == TARGET_DATA_ROW即可 - 新增了变量初始化逻辑,避免行号不存在、行读取失败时出现变量未定义的报错
- 匹配到目标行读取完成后直接break终止循环,不需要遍历全量CSV,大文件下效率更高
- 新增了行号不存在、目标行读取失败的提示,方便排查问题
内容的提问来源于stack exchange,提问作者Shane English
相关产品推荐
相关产品推荐

