J'ai une chaîne contenant plusieurs lignes. Chaque ligne est interrompue par '\ n' et contient des virgules après chaque mot. Je veux stocker le premier mot de chaque ligne dans une liste.

Voici la sortie de la chaîne:

AIG,10,,,,Yes,,,Jr,,,MS,,
Baylor College of Medicine,19,Yes,Yes,,,,,,,,,,Recent
CGG,17,Yes,Yes,,,,,,,,MS,PhD,Recent
Citi,27/28,Yes,,,Yes,,,Jr,Sr,,,,

Ma liste devrait être ['AIG', 'Baylor College of Medicine', 'CGG', 'Citi']

J'ai pensé à utiliser le fractionnement après la première virgule, puis à passer à la ligne suivante, mais je ne sais pas comment y parvenir.


Ma solution était de revenir dans mon code et de rechercher une liste de "sociétés" que j'avais précédemment créées.

sociétés =

['AIG,10,,,,Yes,,,Jr,,,MS,,\n', 'Baylor\xa0College\xa0of\xa0Medicine,19,Yes,Yes,,,,,,,,,,Recent\n', 'CGG,17,Yes,Yes,,,,,,,,MS,PhD,Recent\n', 'Citi,27/28,Yes,,,Yes,,,Jr,Sr,,,,\n', 'ExxonMobil,11,Yes,,,Yes,Fr,Soph,Jr,Sr,PB,,,\n', 'Flow-Cal\xa0Inc.,16,Yes,,,Yes,,,Jr,Sr,,,,All\n', 'Global\xa0Shop\xa0Solutions,18,Yes,,,Yes,,,,Sr,PB,,,All\n']

cmpny_name = []
for i  in companies:
    cmpny_name.append(i.split(',', 1)[0])

cmpny_name = [c.replace('\xa0', ' ') for c in cmpny_name]
print(cmpny_name)

OUTPUT:['AIG', 'Baylor College of Medicine', 'CGG', 'Citi', 'ExxonMobil', 'Flow-Cal Inc.', 'Global Shop Solutions', 'Harris County CTS', 'HCSS', 'Hitachi Consulting', 'HP Inc.', 'INT Inc.']
3
Charles Grealy 13 avril 2018 à 09:07

4 réponses

Meilleure réponse

J'utiliserais split deux fois:

lines = string.split('\n')
output = [line.split(',')[0] for line in lines]
4
Aemyl 13 avril 2018 à 06:14

Je simplifierais légèrement la réponse de @ Amely

from pprint import pprint
a="this is line 1\nthat is line 2\nthose are line3\nbill was here\nbob was here"
first = [line.split(' ')[0] for line in a.split('\n')]
pprint(first)

Et vous obtiendrez les premiers mots de chaque ligne

['this', 'that', 'those', 'bill', 'bob']
3
Tim Seed 13 avril 2018 à 07:34

Une ligne

mylist = [line.split(',')[0] for line in yourstring.split('\n')]

Yourstring.split renvoie une liste de toutes les lignes et dans chaque ligne, vous la divisez en une liste séparée par des virgules et vous sélectionnez le premier élément de cette liste.

1
Natesh bhat 15 avril 2018 à 00:51

Vous pouvez faire quelque chose en utilisant regex:

>>> import re
>>> b=sum([re.findall(r'^[^,]+(?=,)', i) for i in a], [])
>>> b
['AIG', 'Baylor\xa0College\xa0of\xa0Medicine', 'CGG', 'Citi', 'ExxonMobil', 'Flow-Cal\xa0Inc.', 'Global\xa0Shop\xa0Solutions']
2
Dadep 13 avril 2018 à 07:13