2017-04-01 1 views
0

Je suis nouveau dans le traitement de données en utilisant le module CSV. Et j'ai fichier d'entrée Input Data Set et en utilisant ce recueil HSCEcrasez la première et la dernière colonne du fichier csv en utilisant python

import csv 
path1 = "C:\\Users\\apple\\Downloads\\Challenge\\raw\\charity.a.data" 
csv_file_path =   "C:\\Users\\apple\\Downloads\\Challenge\\raw\\output.csv.bak" 

with open(path1, 'r') as in_file: 
    in_file.__next__() 
    stripped = (line.strip() for line in in_file) 
    lines = (line.split(":$%:") for line in stripped if line) 
    with open(csv_file_path, 'w') as out_file: 
     writer = csv.writer(out_file) 
     writer.writerow(('id', 'donor_id','last_name','first_name','year','city','state','postal_code','gift_amount')) 
    writer.writerows(lines) 

`Current Output File

Est-il possible de supprimer (:) dans la première et la dernière colonne du fichier csv. Et je veux la sortie être comme Expected OUTPUT(After removing :) S'il vous plaît aidez-moi.

+0

Alors vous voulez que nous fassions cela pour vous? Avez-vous du code que vous avez essayé? – Artagel

+0

Juste un avis. Gardez à l'esprit que la colonne 'gift_amount' contient des virgules (,) dans les valeurs, ce qui signifie que votre jeu de données doit être séparé (ou quelque chose d'autre que la virgule). Comme l'a dit @Artagel, veuillez fournir un code de ce que vous avez fait jusqu'à présent. – TasosGlrs

+0

Mon entrée initiale est un fichier texte et le format est: id: $%: identifiant_donné: $%: nom_famille: $%: prénom: $%: année: $%: ville: $%: état: $%: code postal: $ %: gift_amount: $ : 1: $%: 10763: $%: Fondation de la famille Aaron et Shirley: $%: Aaron: $%: 2017: $%: New York: $%: NY: $%: 10065: $ %: 380.00: qui est converti en fichier csv. – user229204

Répondre

1

Si vous voulez simplement supprimer le ':' dans la première et la dernière colonne, cela devrait fonctionner. Gardez à l'esprit que votre jeu de données doit être tab (ou autre chose qu'une virgule) séparé avant de le lire, car comme je l'ai commenté dans votre question, il y a des virgules ',' dans votre jeu de données.

path1 = '/path/input.csv' 
path2 = '/path/output.csv' 

with open(path1, 'r') as input, open(path2, 'w') as output: 
file = iter(input.readlines()) 
output.write(next(file)) 

for row in file: 
    output.write(row[1:][:-2] + '\n') 

Mise à jour

Donc après avoir donné votre code, j'ai ajouté un petit changement à faire tout le processus à partir du fichier initial. L'idée est la même. Vous devez simplement exclure le premier et le dernier caractère de chaque ligne. Donc, au lieu de line.strip(), vous devriez avoir line.strip()[1:][:-2].

import csv 
path1 = "C:\\Users\\apple\\Downloads\\Challenge\\raw\\charity.a.data" 
csv_file_path = "C:\\Users\\apple\\Downloads\\Challenge\\raw\\output.csv.bak" 

with open(path1, 'r') as in_file: 
    in_file.__next__() 
    stripped = (line.strip()[1:][:-2] for line in in_file) 
    lines = (line.split(":$%:") for line in stripped if line) 
    with open(csv_file_path, 'w') as out_file: 
     writer = csv.writer(out_file) 
     writer.writerow(('id', 'donor_id','last_name','first_name','year','city','state','postal_code','gift_amount')) 
     writer.writerows(lines) 
+0

Le code ci-dessus lançant l'erreur StopIteration. – user229204

+0

Ce code fonctionnera UNIQUEMENT avec le fichier .csv que vous créez après avoir effectué votre traitement. J'inclurai à ma réponse une autre solution qui utilise votre code pour faire tout le processus depuis le début. – TasosGlrs

+0

Merci @Tasos ci-dessus a travaillé pour moi – user229204