如何根据CSV行的列数动态生成program_im_using命令行参数?
适配任意列CSV的命令生成脚本修改方案
现有
sample.csv文件,每行包含1至多个文件路径:filepath1 filepath1,filepath2 filepath1,filepath2,filepath3 filepath1,filepath2,filepath3,filepath4 filepath1,filepath2需要调用
program_im_using程序,单个文件语法为:program_im_using --file filepath1多文件时每个文件对应一个
--file参数,例如:program_im_using --file filepath1 --file filepath2当前脚本仅支持固定2列的CSV行,需修改为适配任意列数,动态生成对应命令。
Shell脚本实现
替换原有固定列处理逻辑,改为按行分割字段并动态拼接参数:
#!/bin/bash # 逐行读取CSV文件 while IFS=, read -r -a file_paths; do # 初始化命令前缀 cmd="program_im_using" # 遍历当前行的所有文件路径,逐个添加--file参数 for path in "${file_paths[@]}"; do cmd+=" --file \"$path\"" done # 如需预览命令,替换为 echo "$cmd";如需直接执行则保留eval eval "$cmd" done < sample.csv
IFS=, read -r -a file_paths:将每行按逗号分割为数组,自动适配任意列数- 循环数组内的所有路径,动态拼接命令参数
- 可通过
echo预览生成的命令,确认无误后再用eval执行
Python脚本实现
用CSV模块读取每行,自动处理字段分割:
import csv with open('sample.csv', 'r') as csv_file: reader = csv.reader(csv_file) for row in reader: # 过滤空字段(避免行尾逗号导致的无效路径) valid_paths = [p.strip() for p in row if p.strip()] if not valid_paths: continue # 构造命令参数列表 cmd = ['program_im_using'] for path in valid_paths: cmd.extend(['--file', path]) # 打印命令(如需执行,替换为subprocess.run(cmd)) print(' '.join(cmd))
- 借助
csv.reader自动分割每行字段,无需手动处理逗号 - 过滤空字段避免无效参数
- 用列表拼接命令参数,避免字符串拼接的引号问题
内容的提问来源于stack exchange,提问作者Gabriel G.
相关产品推荐
相关产品推荐

