如何根据CSV第3列元素数量重复第1、2列生成目标文件?
没问题,我来帮你搞定这个CSV拆分转换的需求!下面给你两种可行的解决方案,一个用Python脚本(灵活易扩展),一个用awk命令(适合快速批量处理)。
思路说明
核心逻辑很简单:
- 读取CSV的每一行,提取前两列的内容;
- 从第三列及后续字段里,把所有带
(...)格式的元素提取出来; - 把前两列内容分别和每个提取到的元素组合,输出成新的行(你示例里的加粗只是标记,代码里可以按需添加)。
方案一:Python脚本
这种方式适合需要后续调整逻辑的场景,代码可读性强:
import re # 替换成你的输入/输出文件路径 input_file = "input.csv" output_file = "output.txt" with open(input_file, 'r') as infile, open(output_file, 'w') as outfile: for line in infile: line = line.strip() if not line: continue # 只拆分前两个逗号,避免第三列里的逗号干扰 parts = line.split(',', 2) col1 = parts[0].strip() col2 = parts[1].strip() rest_content = parts[2].strip() if len(parts) > 2 else "" # 用正则提取所有带(...)的元素 target_elements = re.findall(r'\S+\([^)]+\)', rest_content) # 生成每行结果 for elem in target_elements: # 如果你需要给特定元素加粗(比如示例里的最后一个),可以加判断 if elem == "39852:38000-90000/2(433-648)": outfile.write(f"**{col1} {col2} {elem}**\n") else: outfile.write(f"{col1} {col2} {elem}\n")
运行方式
把代码保存为process_csv.py,然后在终端执行:
python process_csv.py
方案二:Awk命令行工具
如果你习惯用命令行处理文本,这个方式更快捷:
BEGIN { FS="," } { col1 = $1; col2 = $2; # 合并第三列及之后的所有内容 rest = ""; for (i=3; i<=NF; i++) rest = rest " " $i; # 按空格拆分内容,筛选带(...)的元素 split(rest, elems, " "); for (j in elems) { elem = elems[j]; if (elem ~ /\([^)]+\)/) { # 同样可以加判断实现特定元素加粗 if (elem == "39852:38000-90000/2(433-648)") { print "**" col1 " " col2 " " elem "**"; } else { print col1 " " col2 " " elem; } } } }
运行方式
把代码保存为process_csv.awk,然后执行:
awk -f process_csv.awk input.csv > output.txt
这两种方法都能完美生成你想要的输出格式,你可以根据自己的使用场景选择。如果有其他调整需求,比如修改分隔符、处理特殊字符,随时调整代码逻辑就行~
内容的提问来源于stack exchange,提问作者OXXO
相关产品推荐
相关产品推荐

