绝对不是解析的新手。如何从头开始构建自定义解析器?
我有一个csv文件,其内容如下
ADD UTYPRABTOAW:LOGICRNCID=253, RABINDEX=1, DELAYCLASS=3, TOAWS=35, TOAWE=8;
我希望保留相关值,并删除其他所有内容
我希望将上面的行转换为253,1,3,35,8
。
我偶然发现了Python解析的概念,但我正在寻找一个起点。
我有150个单独的csv
文件,并且每个文件我都必须构建一个单独的解析器。
答案 0 :(得分:0)
可以使用正则表达式提取数字,但这实际上取决于您要解析的文件的完整格式。如果您的输入文件如下所示:
ADD UTYPRABTOAW:LOGICRNCID=253, RABINDEX=1, DELAYCLASS=3, TOAWS=35, TOAWE=8;
ADD UTYPRABTOAW:LOGICRNCID=253, RABINDEX=2, DELAYCLASS=3, TOAWS=35, TOAWE=8;
ADD UTYPRABTOAW:LOGICRNCID=253, RABINDEX=3, DELAYCLASS=3, TOAWS=35, TOAWE=8;
然后,以下脚本将轻松将其转换为所需的输出CSV格式:
import re
import csv
with open('input.csv', newline='') as f_input, open('output.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
for row in f_input:
csv_output.writerow(re.findall(r"\d+", row))
即output.csv
为:
253,1,3,35,8
253,2,3,35,8
253,3,3,35,8
glob
库可用于在给定文件夹中的所有匹配文件上执行此过程,例如,所有以名称input
开头的CSV文件,例如input*.csv
。另外,如果您的文件包含其他不需要的行,则需要添加条件,例如if row.startswith('ADD'):
import re
import csv
import glob
with open('output.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
for filename in glob.glob('input*.csv'):
with open(filename, newline='') as f_input:
for row in f_input:
if row.startswith('ADD'):
csv_output.writerow(re.findall(r"\d+", row))