如何解决解析类csv格式,而忽略引号内的分隔符
我正在尝试解析一个类似csv的文件,该文件具有一系列用分号(;
)分隔的键和值,但是在忽略任何用双引号引起来的分号时遇到了问题。行的一般格式为:
key_1 "Value 1"; key_2 "Value 2"; key_3 "Some other value with; possible semicolon"
我尝试使用CSV模块,但是除非整个条目都用引号引起来,否则它似乎无法正确地逸出;
(键和值都需要被逸出,而实际上并不需要)。
我并不是真的想编写自己的解析器(但是如果我真的需要的话可以)。我想知道是否有现有的库可以处理这个问题?我尝试过的当前代码是:
import csv
import io
test_line = '''gene_id "LOC101495167"; product "endo-1,3;1,4-beta-D-glucanase-like"; exon_number "1"; '''
reader = csv.reader(
io.StringIO(test_line),delimiter = ';',quotechar = '"',skipinitialspace = True,quoting=csv.QUOTE_ALL
)
for row in reader:
print(row)
当前输出:
['gene_id "LOC101495167"','product "endo-1,3','1,4-beta-D-glucanase-like"','exon_number "1"','']
必需的输出:
['gene_id "LOC101495167"','exon_number "1"']
或理想情况下:
{"gene_id": "LOC101495167","product": "endo-1,4-beta-D-glucanase-like","exon_number": "1"}
解决方法
一个正则表达式就足够了:
import re
test_line = '''gene_id "LOC101495167"; product "endo-1,3;1,4-beta-D-glucanase-like"; exon_number "1"; '''
print(re.findall(r'([^ ]+) "([^"]+)";?',test_line))
输出:
[('gene_id','LOC101495167'),('product','endo-1,4-beta-D-glucanase-like'),('exon_number','1')]
这可用于创建所需的最终输出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。