Sauter des lignes, csv Dict Lecteur de Python
J'ai un fichier qui a une blague préface à l'en-tête. De sorte qu'il ressemble à ceci:
Review performed by:
Meeting:
Person:
Number:
Code:
Confirmation
Tab Separated Header Names That I Want To Use
Je veux passer au-delà de tout, et utiliser l'onglet sep noms d'en-tête pour mon code. C'est ce que j'ai à ce jour:
reader = csv.DictReader(CSVFile)
for i in range(14): #trying to skip the first 14 rows
reader.next()
for row in reader:
print(row)
if args.nextCode:
tab = (row["Tab"])
sep = int((row["Separated"]))
Ce code obtient cette erreur:
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 104, in next
row = self.reader.next()
StopIteration
J'ai essayé d'imprimer les lignes, pour voir où j'étais dans le fichier, et j'ai changé le "range(14)" à la série 5, mais lorsque j'imprime la ligne, j'obtiens ceci:
{'Review performed by:': 'Tab/tSeparated/tHeader/tNames/tThat/tI/tWant/tTo/tUse'}
Traceback (most recent call last):
File "program.py", line 396, in <module>
main()
File "program.py", line 234, in main
tab = (row["Tab"])
KeyError: 'Tab'
Donc je ne suis pas vraiment sûr de la bonne façon de sauter ces lignes. Toute aide serait appréciée.
- Votre traceback ne correspond pas à la posté code. Veuillez fournir une MCVE.
Vous devez vous connecter pour publier un commentaire.
Un
csv.DictReader
lit la première ligne du fichier lorsqu'il est instancié, pour obtenir les en-têtes pour les rangées suivantes. Par conséquent, il utiliseReview performed by:
comme la ligne d'en-tête, puis vous ignorez les 14 lignes.Au lieu de cela, sauter les lignes avant de la création de la
DictReader
:Vous pouvez rassembler le
CSVFile
avec unitertools.islice
itérateur objet à la tranche-off, les lignes de la préface lors de la création de laDictReader
, au lieu de les fournir directement au constructeur.Cela fonctionne parce que les
csv.reader
constructeur accepte n'importe quel "objet qui prend en charge la itérateur protocole et retourne une chaîne de caractères à chaque fois sonnext()
méthode est appelée" selon la csv docs. Cela s'applique également àcsv.DictReader
s, car ils utilisent un sous-jacentreader
instance interne.