J'ai un fichier CSV avec les données suivantes:
months = []
for line in lines:
months.append(line.split("-")
J'ai importé le fichier en python comme ceci:
with open(csvpath, 'r', errors='ignore') as fileHandle: lines = fileHandle.read()
I besoin de parcourir ces lignes de manière à extraire uniquement les mois, c'est-à-dire "Jan", "Feb", etc. et de les mettre dans une liste différente. Je dois aussi en quelque sorte sauter la première ligne à savoir Date, Profit / Losses qui est l'en-tête.
Voici le code que j'ai écrit jusqu'à présent:
Date,Profit/Losses Jan-10,867884 Feb-10,984655 Mar-10,322013 Apr-10,-69417 May-10,310503 Jun-10,522857 Jul-10,1033096 Aug-10,604885 Sep-10,-216386 Oct-10,477532 Nov-10,893810 Dec-10,-80353
Quand j'essaye d'imprimer la liste des mois , cela divise chaque caractère du fichier !!
Où est-ce que je me trompe ici ??
4 Réponses :
Essayez ceci si vous voulez vraiment le faire à la dure:
months = []
for line in lines[1:]:
months.append(line.split("-")[0])
lignes [1:] sautera la première ligne et ligne. split ("-") [0] ne sortira que le mois et s'ajoutera à votre liste months.
Cependant, comme suggéré par AChampion, vous devriez vraiment regardez dans les packages csv ou pandas .
J'ai essayé ça, ça ne marche pas! Il imprime à l'infini chaque lettre dans le fichier entier et ne s'arrête pas. J'ai dû Ctrl + C pour interrompre le terminal.
Oh, essayez lines = fileHandle.readlines () ; cela garantira que chaque ligne de votre tableau est lue séparément
Une réponse à votre question est d'utiliser fileHandle.readlines().
lines = fileHandle.readlines()
# print(lines)
# ['Date,Profit/Losses\n', 'Jan-10,867884\n', 'Feb-10,984655\n', 'Mar-10,322013\n',
# 'Apr-10,-69417\n', 'May-10,310503\n', 'Jun-10,522857\n', 'Jul-10,1033096\n', 'Aug-10,604885\n',
# 'Sep-10,-216386\n', 'Oct-10,477532\n', 'Nov-10,893810\n', 'Dec-10,-80353\n']
for line in lines[1:]:
# Starting from 2nd item in the list since you just want months
months.append(line.split("-")[0])
Vous pouvez presque toujours minimiser la douleur en utilisant des outils spécialisés, tels que le module csv et la compréhension de liste:
import csv
with open("yourfile.csv") as infile:
reader = csv.reader(infile) # Create a new reader
next(reader) # Skip the first row
months = [row[0].split("-")[0] for row in reader]
Vous pouvez également utiliser un DictReader () , par exemple reader = csv.DictReader (infile); mois = [row ['Date']. split ('-') [0] for row in reader] , pas très différent à part qu'il gère l'en-tête de colonne pour vous.
Cela devrait donner les résultats souhaités (en supposant que le fichier nommé data.csv se trouve dans le même répertoire):
result = []
with open('data.csv', 'r', encoding='UTF-8') as data:
next(data)
for record in data:
result.append(record.split('-')[0])
Le module
csvest votre ami. Sinon,pandasserait d'une grande aide.Lorsque vous lisez tout le fichier avec
read, vous n'avez plus de lignes. Voslignessont une chaîne etpour les lignes en lignespasse sur les lettres individuelles. Voir une solution proposée ci-dessous.@DYZ, ça a beaucoup de sens! Merci encore!