Python 基于文件中的制表符拆分字符串

Python 基于文件中的制表符拆分字符串,python,string,split,Python,String,Split,我有一个包含由制表符(“\t”)分隔的值的文件。我正在尝试创建一个列表,并在列表中存储文件的所有值。但我遇到了一些问题。这是我的密码 line = "abc def ghi" values = line.split("\t") 只要每个值之间只有一个选项卡,它就可以正常工作。但是,如果有一个以上的选项卡,那么它也会将该选项卡复制为值。在我的情况下,大多数额外选项卡将位于文件中最后一个值之后。您可以在此处使用regex: >>> import re >>> s

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

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

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

您可以在此处使用
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']

可以使用regexp执行以下操作:

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


s = "a\t\tbcde\t\tef"
patt.findall(s)
['a', 'bcde', 'ef']  

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

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']

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


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

一个基于另一个
regex
的解决方案:

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

>>> r = re.compile(r'([^\t]*)\t*')
>>> r.findall(strs)[:-1]
['foo', 'bar', 'spam']

比我的过滤方法好+1但如果我们在文件末尾有标签,它将如何处理。它仍将使用空值。@yasra002请发布一个示例。@AshwiniChaudhary yas=“yas bs cda”bbb=re.split(r'\t+,yas),因此bb仍将使用空值,因为最后有一个选项卡。@AshwiniChaudhary非常感谢:)值中还有其他不应拆分的空白字符吗?因为如果没有,您可以只使用
line.split()
,它会处理这个问题(以及丢弃空的前导/尾随元素)。是的,但这仍然会导致空元素。