タブ(「\ t」)で区切られた値を含むファイルがあります。リストを作成し、ファイルのすべての値をリストに保存しようとしています。しかし、問題が発生します。これが私のコードです。
line = "abc def ghi"
values = line.split("\t")
各値の間にタブが1つしかない限り、問題なく機能します。ただし、タブが複数ある場合は、タブも値にコピーされます。私の場合、主に余分なタブはファイルの最後の値の後になります。
ここで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']
Pythonは、同名の csv
モジュールでCSVファイルをサポートしています。 カンマで区切られた値よりもはるかに多くをサポートしているため、比較的誤った名前です。
基本的なWord分割を超える必要がある場合は、ご覧ください。たとえば、引用符で囲まれた値を処理する必要があるためです。