2014-05-17 9 views
0

Je dois filtrer et faire des calculs sur les données provenant de fichiers CSV.Recherche d'un fichier CSV

J'ai écrit un simple script Pyhton pour isoler les lignes dont j'ai besoin (elles devraient contenir certains mots-clés comme "Kite"), mais mon script ne fonctionne pas et je ne trouve pas pourquoi. Pouvez-vous me dire ce qui ne va pas? Une autre chose: une fois arrivé à la/les ligne (s) choisie (s), comment puis-je pointer vers chaque colonne (séparée par des virgules)?

Merci d'avance.

R.

import csv 

with open('sales-2013.csv', 'rb') as csvfile: 
    sales = csv.reader(csvfile) 
    for row in sales: 
     if row == "Kite": 
      print ",".join(row) 

Répondre

0

Vous lisez le fichier en octets. Modifiez la commande open('filepathAndName.csv, 'r') ou convertissez vos chaînes comme "Kite".encode('UTF-8'). La deuxième erreur pourrait être que vous cherchez une ligne avec le mot "Kite", mais si "Kite" est une sous-chaîne de cette ligne, il ne sera pas trouvé. Dans ce cas, vous devez utiliser if "Kite" in row:.

with open('sales-2013.csv', 'rb') as csvfile: # <- change 'rb' to 'r' 
    sales = csv.reader(csvfile) 
    for row in sales: 
     if row == "Kite": # <- this would be better: if "Kite" in row: 
      print ",".join(row) 

Lire ceci: https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files

+0

J'ai ajouté une mise à jour – w5e

+0

Merci! Maintenant, cela fonctionne, MAIS ce que j'ai remarqué est que si la première occurrence du mot "Kite" est "Kite-quelque chose", la ligne ne sera pas sélectionnée. J'ai besoin de quelque chose comme l'ancienne commande DOS '*' (tout). Comment exprimez-vous '' "Kite *" 'en python? – Sinserif

+0

Utilisez un RegExp comme ceci: 're.match (r'Kite [\ w | \ W] * ', ligne)'. – w5e

0

Pour trouver les lignes que contiennent le mot « Cerf-volant », alors vous devriez utiliser

for row in sales: # here you iterate over every row (a *list* of cells) 
    if "Kite" in row: 
     # do stuff 

Maintenant que vous savez comment trouver les lignes requises, vous peut accéder aux cellules souhaitées en indexant les lignes. Par exemple, si vous voulez sélectionner la deuxième cellule d'une ligne, vous faites simplement

cell = row[1] # remember, indexes start with 0 
+0

Merci! Maintenant, cela fonctionne, MAIS ce que j'ai remarqué est que si la première occurrence du mot "Kite" est "Kite-quelque chose", la ligne ne sera pas sélectionnée. J'ai besoin de quelque chose comme l'ancienne commande DOS 'astérisque' (tous). Comment exprimez-vous "Kite 'astérisque" "en python? – Sinserif