我的文件包含由制表符 ("\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']
您可以使用正则表达式来执行此操作:
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']
另一个regex
基于解决方案:
>>> strs = "foo\tbar\t\tspam"
>>> r = re.compile(r'([^\t]*)\t*')
>>> r.findall(strs)[:-1]
['foo', 'bar', 'spam']
csv
Python 在同名模块中支持 CSV 文件。它的名称相对错误,因为它支持的不仅仅是逗号分隔的值。
如果你需要超越基本的分词,你应该看看。比如说,因为您需要处理引用的值...