Python-以逗号分割字符串且忽略引号中的逗号

Python-以逗号分割字符串且忽略引号中的逗号

要处理的问题

我们在读入txt、csv等数据时,经常会需要根据列名将读入的字符串进行分割。比较简单的数据处理就是文件中每行每列都有数据存在,并且一行数据之间以某种符号(空格,逗号等)分割。但有些字符串中会有各种比较难处理的符号。但比如有如下的一个字符串存放在csv格式的文件中。
Q9UI32,“Glutaminase liver isoform,mitochondrial”,GLS2,FTSI_HAEIN,"",,,,1574687

这个文件本身有9列,所以该字符串应该被正确的分割为9个字符。看到数据首先会想到字符串的split方法,将逗号作为分隔符来分割该字符串,但是实际结果却并不是我们所期望的,具体见后面代码及结果(需要说明的是FTSI_HAEIN字符后面是双引号,双引号后的几个逗号之间是没有空格的,双引号后面的第一个逗号是两个字符之间的分隔符,另外三个逗号表示了对应的三列数据为空)

假如我们将该字符串存放在test.csv中,并且test.csv中只存放这一个字符串。后面的代码都是基于此的。

使用File的readlines读入并使用字符串的split分割

filename='D:/test.csv'

f=open(filename,'r')
lines=f.readlines()

for line in lines:
    temp1=line.strip()
    temp2=temp1.split(',')
    print(temp2)
    
['Q9UI32', '"Glutaminase liver isoform', 'mitochondrial"', 'GLS2', 'FTSI_HAEIN', '""', '', '', '', '1574687']

用这样的方法处理的话会分割双引号中以逗号分割的字符也分开来,这并不是我们期望的结果。

使用shlex模块

看到split分割的结果,我们可能会想到用shlex模块来解决,该模块分割可以忽略引号中的逗号。

import shlex

filename='D:/test.csv'

f=open(filename,'r')
lines=f.readlines()

for line in lines:
    temp1=line.strip()
    temp1=shlex.shlex(temp1)
    temp1.whitespace=','
    temp1.whitespace_split=True
    temp2=list(temp1)
    print(temp2)

['Q9UI32', '"Glutaminase liver isoform,mitochondrial"', 'GLS2', 'FTSI_HAEIN', '""', '1574687']

双引号中的字符串没有被分割,但是后面的逗号都被当做空格分割了。所以这个方法还是不可行。

使用csv模块读入数据

import csv

filename='D:/test.csv'

f=open(filename)
reader=csv.reader(f)

for row in reader:
    print(row)

['Q9UI32', 'Glutaminase liver isoform,mitochondrial', 'GLS2', 'FTSI_HAEIN', '', '', '', '', '1574687']

可以看到,对于csv中的数据,使用csv模块读入时非常方便的。这时不论是想将数据存入excel表格或是提取某个值都可以按列表的方式方便提取。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值