<p>可以使用单引号拆分:</p>
<pre><code>i = "1,'Test','items (one, two, etc.)',1,'long, list'"
print([ele.strip(" ,") for ele in i.split("'") if ele.strip(",")])
['1', 'Test', 'items (one, two, etc.)', '1', 'long, list']
</code></pre>
<p>或与地图一起使用:</p>
<pre><code>print([ele for ele in map(lambda x: x.strip(", "), i.split("'")) if ele])
</code></pre>
<p>在python 3中使用map非常有效:</p>
<pre><code>In [7]: i = "1,'Test','items (one, two, etc.)',1,'long, list'"
In [8]: timeit [ele for ele in map(lambda x: x.strip(", "), i.split("'")) if ele]
1000000 loops, best of 3: 1.5 µs per loop
In [9]: r = re.compile(r"(\d)|'([^']*)'")
In [10]: timeit [k for j in r.findall(i) for k in j if k]
100000 loops, best of 3: 3.92 µs per loop
</code></pre>
<p>更好地使用python2和<code>itertools.imap</code>:</p>
<pre><code>In [9]: from itertools import imap
In [10]: timeit [ele for ele in imap(lambda x: x.strip(", "), i.split("'")) if ele]
1000000 loops, best of 3: 871 ns per loop
In [11]: r = re.compile(r"(\d)|'([^']*)'")
In [12]: timeit [k for j in r.findall(i) for k in j if k]
100000 loops, best of 3: 4.27 µs per loop
In [17]: from ast import literal_eval
In [18]: timeit literal_eval(i)
100000 loops, best of 3: 16.2 µs per loop
</code></pre>
<p>所有这些函数都返回相同的输出条文本求值,因为它将数字求值为整数:</p>
<pre><code>In [19]: literal_eval(i)
Out[19]: (1, 'Test', 'items (one, two, etc.)', 1, 'long, list')
In [20]: [k for j in r.findall(i) for k in j if k]
Out[20]: ['1', 'Test', 'items (one, two, etc.)', '1', 'long, list']
In [21]: [ele for ele in imap(lambda x: x.strip(", "), i.split("'")) if ele]Out[21]: ['1', 'Test', 'items (one, two, etc.)', '1', 'long, list']
</code></pre>
<p>空行没有什么不同:</p>
<pre><code>i = "1,'Test',NULL,'items (one, two, etc.)',1,'long, list'"
print([ele for ele in map(lambda x: x.strip(", "), i.split("'")) if ele])
['1', 'Test', 'NULL', 'items (one, two, etc.)', '1', 'long, list']
</code></pre>