1
votes

python - Divise une chaîne dans un fichier CSV par délimiteur

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


3 commentaires

Le module csv est votre ami. Sinon, pandas serait d'une grande aide.


Lorsque vous lisez tout le fichier avec read , vous n'avez plus de lignes. Vos lignes sont une chaîne et pour les lignes en lignes passe sur les lettres individuelles. Voir une solution proposée ci-dessous.


@DYZ, ça a beaucoup de sens! Merci encore!


4 Réponses :


0
votes

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 .


2 commentaires

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



1
votes

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])


0 commentaires

1
votes

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]


1 commentaires

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.



0
votes

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])


0 commentaires