8
votes

Est-il possible d'utiliser read_csv pour lire uniquement des lignes spécifiques?

J'ai un fichier CSV qui ressemble à ceci: xxx

et ne peut pas se débarrasser du "test" string.

est Il est possible de vérifier si une ligne commence avec une date et ne lisez que celles qui font?


0 commentaires

4 Réponses :


4
votes

Lorsque vous obtenez la ligne code> à partir du csv.reader code>, et lorsque vous pouvez être sûr que le premier élément est une chaîne, vous pouvez utiliser

if not row[0].startswith('TEST'):
    process(row)


0 commentaires

1
votes

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html?highighlight=read_csv#pandas.csv#pandas.csv

SkipRows: Liste similaire ou entier Numéros de ligne pour sauter (0-indexé) ou nombre de lignes à sauter (int)

passe [0, 6] pour ignorer des lignes avec "test".


1 commentaires

Je crains de savoir comment de telles lignes ressemblent, pas de leurs index.



8
votes
from cStringIO import StringIO
import pandas

s = StringIO()
with open('file.csv') as f:
    for line in f:
        if not line.startswith('TEST'):
            s.write(line)
s.seek(0) # "rewind" to the beginning of the StringIO object

pandas.read_csv(s) # with further parameters…

0 commentaires

0
votes

Une autre option, car je viens de courir dans ce problème aussi: xxx

Il est moins portable que @ Eumiro's (lu: ne fonctionne probablement pas sous Windows) et nécessite la lecture du fichier deux fois, Mais a l'avantage de ne pas avoir à stocker tout le contenu du fichier en mémoire.

Vous pouvez bien sûr faire la même chose que le grep dans Python, mais ce serait probablement plus lent.


0 commentaires