J'ai un fichier qui contient des valeurs séparées par une tabulation ("\ t"). J'essaie de créer une liste et de stocker toutes les valeurs de fichier dans la liste. Mais j'ai un problème. Voici mon code.
line = "abc def ghi"
values = line.split("\t")
Cela fonctionne bien tant qu'il n'y a qu'un seul onglet entre chaque valeur. Mais s'il y a un seul onglet, il le copie également dans les valeurs. Dans mon cas, la plupart du temps l'onglet supplémentaire sera après la dernière valeur du fichier.
Vous pouvez utiliser regex
ici:
>>> import re
>>> strs = "foo\tbar\t\tspam"
>>> re.split(r'\t+', strs)
['foo', 'bar', 'spam']
mise à jour:
Vous pouvez utiliser str.rstrip
pour se débarrasser de la fuite '\t'
puis appliquez regex.
>>> yas = "yas\t\tbs\tcda\t\t"
>>> re.split(r'\t+', yas.rstrip('\t'))
['yas', 'bs', 'cda']
Vous pouvez utiliser regexp pour faire ceci:
import re
patt = re.compile("[^\t]+")
s = "a\t\tbcde\t\tef"
patt.findall(s)
['a', 'bcde', 'ef']
Diviser sur l'onglet, mais ensuite supprimer toutes les correspondances vides.
text = "hi\tthere\t\t\tmy main man"
print [splits for splits in text.split("\t") if splits is not ""]
Les sorties:
['hi', 'there', 'my main man']
Une autre solution basée sur regex
:
>>> strs = "foo\tbar\t\tspam"
>>> r = re.compile(r'([^\t]*)\t*')
>>> r.findall(strs)[:-1]
['foo', 'bar', 'spam']
Python prend en charge les fichiers CSV dans le module éponyme csv
. Il est relativement mal nommé car il supporte bien plus que juste des valeurs séparées par des virgules .
Si vous avez besoin d'aller au-delà du fractionnement de base de Word, vous devriez jeter un coup d'œil. Dites, par exemple, parce que vous avez besoin de traiter avec les valeurs citées ...