49

我的文件包含由制表符 ("\t") 分隔的值。我正在尝试创建一个列表并将文件的所有值存储在列表中。但我遇到了一些问题。这是我的代码。

line = "abc def ghi"
values = line.split("\t")

只要每个值之间只有一个选项卡,它就可以正常工作。但是,如果有一对一的选项卡,那么它也会将该选项卡复制到值。在我的情况下,大多数额外的选项卡将位于文件中的最后一个值之后。

4

5 回答 5

82

你可以regex在这里使用:

>>> import re
>>> strs = "foo\tbar\t\tspam"
>>> re.split(r'\t+', strs)
['foo', 'bar', 'spam']

更新:

您可以使用 str.rstrip摆脱尾随'\t',然后应用正则表达式。

>>> yas = "yas\t\tbs\tcda\t\t"
>>> re.split(r'\t+', yas.rstrip('\t'))
['yas', 'bs', 'cda']
于 2013-06-11T07:16:11.193 回答
4

您可以使用正则表达式来执行此操作:

import re
patt = re.compile("[^\t]+")


s = "a\t\tbcde\t\tef"
patt.findall(s)
['a', 'bcde', 'ef']  
于 2013-06-11T07:20:38.867 回答
3

在选项卡上拆分,然后删除所有空白匹配项。

text = "hi\tthere\t\t\tmy main man"
print [splits for splits in text.split("\t") if splits is not ""]

输出:

['hi', 'there', 'my main man']
于 2013-06-11T07:29:28.857 回答
1

另一个regex基于解决方案:

>>> strs = "foo\tbar\t\tspam"

>>> r = re.compile(r'([^\t]*)\t*')
>>> r.findall(strs)[:-1]
['foo', 'bar', 'spam']
于 2013-06-11T16:07:40.793 回答
0

csvPython 在同名模块中支持 CSV 文件。它的名称相对错误,因为它支持的不仅仅是逗号分隔的值。

如果你需要超越基本的分词,你应该看看。比如说,因为您需要处理引用的值...

于 2013-06-11T08:18:03.557 回答