当前位置:  开发笔记 > 编程语言 > 正文

如何将逗号分隔的字符串解析为列表(警告)?

如何解决《如何将逗号分隔的字符串解析为列表(警告)?》经验,为你挑选了3个好方法。

我需要能够得到一个字符串:

'''foo, bar, "one, two", three four'''

成:

['foo', 'bar', 'one, two', 'three four']

我有一种感觉(来自#python的提示)该解决方案将涉及shlex模块.



1> Dan Lenski..:

这取决于你想要获得多么复杂...你想允许多种类型的引用.逃脱报价怎么样?

您的语法非常类似于Python标准库支持的常见CSV文件格式:

import csv
reader = csv.reader(['''foo, bar, "one, two", three four'''], skipinitialspace=True)
for r in reader:
  print r

输出:

['foo', 'bar', 'one, two', 'three four']

HTH!


刚试过这个就可以了.比shlex模块更直接的语法,所以这得到我的投票!

2> nosklo..:

shlex模块解决方案允许转义引号,一个引用转义另一个,以及所有花哨的东西shell支持.

>>> import shlex
>>> my_splitter = shlex.shlex('''foo, bar, "one, two", three four''', posix=True)
>>> my_splitter.whitespace += ','
>>> my_splitter.whitespace_split = True
>>> print list(my_splitter)
['foo', 'bar', 'one, two', 'three', 'four']

转义引用示例:

>>> my_splitter = shlex.shlex('''"test, a",'foo,bar",baz',bar \xc3\xa4 baz''',
                              posix=True) 
>>> my_splitter.whitespace = ',' ; my_splitter.whitespace_split = True 
>>> print list(my_splitter)
['test, a', 'foo,bar",baz', 'bar \xc3\xa4 baz']


只需更改my_splitter.whitespace + =','to =','即可完成,但您仍需要删除每个元素.

3> Greg Hewgill..:

您可能还需要考虑csv模块.我没有尝试过,但看起来您的输入数据更接近于CSV而不是shell语法(这是shlex解析的).

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有