J'ai un fichier CSV avec environ 2000 enregistrements.
Chaque enregistrement a une chaîne et une catégorie:
This is the first line,Line1
This is the second line,Line2
This is the third line,Line3
J'ai besoin de lire ce fichier dans une liste qui ressemble à ceci:
data = [('This is the first line', 'Line1'),
('This is the second line', 'Line2'),
('This is the third line', 'Line3')]
Comment importer ce CSV dans la liste dont j'ai besoin en utilisant Python?
csv
module: docs.python.org/2/library/csv.htmlRéponses:
Utilisation du module csv :
Production:
Si vous avez besoin de tuples:
Production:
Ancienne réponse Python 2, utilisant également le
csv
module:la source
b
provoque l'ouverture du fichier en mode binaire par opposition au mode texte. Sur certains systèmes, le mode texte signifie qu'il\n
sera converti en nouvelle ligne spécifique à la plate-forme lors de la lecture ou de l'écriture. Voir la documentation .Mis à jour pour Python 3 :
Production:
la source
'r'
est le mode par défaut, il n'est donc pas nécessaire de la spécifier. La documentation mentionne également si csvfile est un objet fichier, il doit être ouvert avec newline = ''.Pandas est assez doué pour traiter les données. Voici un exemple de son utilisation:
Un gros avantage est que les pandas traitent automatiquement les lignes d'en-tête.
Si vous n'avez pas entendu parler de Seaborn , je vous recommande d'y jeter un œil.
Voir aussi: Comment lire et écrire des fichiers CSV avec Python?
Pandas # 2
Le contenu de df est:
Le contenu des dicts est
Pandas # 3
Le contenu de
lists
est:la source
tuples = [tuple(x) for x in df.values]
peut être écrit à latuples = list(df.itertuples(index=False))
place. Notez que les documents Pandas découragent l'utilisation de.values
en faveur de.to_numpy()
. Le troisième exemple me déroute. Premièrement, parce que la variable est nomméetuples
, ce qui impliquerait qu'il s'agit d'une liste de tuples, alors que c'est en fait une liste de listes. Deuxièmement, parce que pour autant que je sache, cette expression entière peut être remplacée pardf.to_list()
. Je ne sais pas non plus si le deuxième exemple est vraiment pertinent ici.Mise à jour pour Python3:
Production:
Si csvfile est un objet fichier, il doit être ouvert avec
newline=''
.module csv
la source
list(map())
sur une liste de compréhension? Notez également l'espace blanc au début de chaque élément de la deuxième colonne.Si vous êtes sûr qu'il n'y a pas de virgules dans votre entrée, autre que pour séparer la catégorie, vous pouvez lire la ligne de fichiers en ligne et divisez sur
,
, puis appuyez sur le résultatList
Cela dit, il semble que vous regardez un fichier CSV, vous pouvez donc envisager d'utiliser les modules correspondants.
la source
la source
.read().splitlines()
, vous pouvez parcourir directement chaque ligne du fichier:for line in in_file: res.append(tuple(line.rstrip().split(",")))
Notez également que l'utilisation.split(',')
signifie que chaque élément de la deuxième colonne commencera par un espace supplémentaire.line.rstrip()
->line.rstrip('\n')
.Comme déjà dit dans les commentaires, vous pouvez utiliser la
csv
bibliothèque en python. csv signifie des valeurs séparées par des virgules qui semblent exactement votre cas: une étiquette et une valeur séparées par une virgule.Étant un type de catégorie et de valeur, je préférerais utiliser un type de dictionnaire au lieu d'une liste de tuples.
Quoi qu'il en soit, dans le code ci-dessous, je montre les deux façons:
d
est le dictionnaire etl
est la liste des tuples.la source
(row[0], row[1])
plus faible / plus sujet aux erreurs que la simple utilisationtuple(row)
?Une simple boucle suffirait:
la source
Malheureusement, je ne trouve aucune des réponses existantes particulièrement satisfaisante.
Voici une solution Python 3 simple et complète, utilisant le module csv .
Remarquez l'
skipinitialspace=True
argument. Ceci est nécessaire car, malheureusement, le CSV d'OP contient des espaces après chaque virgule.Production:
la source
En étendant un peu vos besoins et en supposant que vous ne vous souciez pas de l'ordre des lignes et que vous souhaitez les regrouper sous catégories, la solution suivante peut fonctionner pour vous:
De cette façon, vous obtenez toutes les lignes pertinentes disponibles dans le dictionnaire sous la clé étant la catégorie.
la source
Voici le moyen le plus simple en Python 3.x d'importer un CSV dans un tableau multidimensionnel, et ses seulement 4 lignes de code sans rien importer!
la source
Vient ensuite un morceau de code qui utilise le module csv mais extrait le contenu du fichier.csv dans une liste de dictionnaires en utilisant la première ligne qui est un en-tête de la table csv
la source
csv.DictReader
?