web-dev-qa-db-fra.com

fractionner une chaîne en fonction de l'onglet dans le fichier

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.

38
hjelpmig

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']
62
Ashwini Chaudhary

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

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

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']
1
Sylvain Leroux

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 ...

0
Sylvain Leroux