Il n'est pas nécessaire d'affecter readline () à une variable si l'on n'a pas besoin de cette ligne. Cependant, j'aime le plus cette solution.
Anna
Il n'est pas recommandé de mélanger les lectures directes avec l'utilisation du fichier en tant qu'itérateur (bien que dans ce cas spécifique aucun dommage ne soit fait).
chepner
9
Si le découpage pouvait fonctionner sur les itérateurs ...
from itertools import islice
with open(fname)as f:for line in islice(f,1,None):pass
Cela lira le fichier entier en mémoire à la fois, donc ce n'est pratique que si vous lisez un fichier assez petit.
Hayden Schiff
1
Pour généraliser la tâche de lecture de plusieurs lignes d'en-tête et pour améliorer la lisibilité, j'utiliserais l'extraction de méthode. Supposons que vous vouliez symboliser les trois premières lignes decoordinates.txt pour utiliser comme informations d'en-tête.
Exemple
coordinates.txt
---------------Name,Longitude,Latitude,Elevation,CommentsString,DecimalDeg.,DecimalDeg.,Meters,StringEuler's Town,7.58857,47.559537,0, "Blah"
Faneuil Hall,-71.054773,42.360217,0
Yellowstone National Park,-110.588455,44.427963,0
Ensuite, l'extraction de méthode vous permet de spécifier ce que vous voulez faire avec les informations d'en-tête (dans cet exemple, nous jetons simplement les lignes d'en-tête en fonction de la virgule et les renvoyons sous forme de liste, mais il y a de la place pour faire beaucoup plus).
def __readheader(filehandle, numberheaderlines=1):"""Reads the specified number of lines and returns the comma-delimited
strings on each line as a list"""for _ in range(numberheaderlines):yield map(str.strip, filehandle.readline().strip().split(','))with open('coordinates.txt','r')as rh:# Single header line#print next(__readheader(rh))# Multiple header linesfor headerline in __readheader(rh, numberheaderlines=2):print headerline # Or do other stuff with headerline tokens
Si coordinates.txtcontient une autre ligne d'en-tête, changez simplement numberheaderlines. Le meilleur de tous, c'est clair ce qui __readheader(rh, numberheaderlines=2)se passe et nous évitons l'ambiguïté d'avoir à comprendre ou commenter pourquoi l'auteur de la réponse acceptée utilise next()dans son code.
# Open a connection to the filewith open('world_dev_ind.csv')as file:# Skip the column names
file.readline()# Initialize an empty dictionary: counts_dict
counts_dict ={}# Process only the first 1000 rowsfor j in range(0,1000):# Split the current line into a list: line
line = file.readline().split(',')# Get the value for the first column: first_col
first_col = line[0]# If the column value is in the dict, increment its valueif first_col in counts_dict.keys():
counts_dict[first_col]+=1# Else, add to the dict and set value to 1else:
counts_dict[first_col]=1# Print the resulting dictionaryprint(counts_dict)
next(f)
utiliserf.readline()
et de le stocker en tant que variableheader_line = next(f)
.la source
['a', 'b', 'c'][1:]
=>['b', 'c']
consume()
demore-itertools
comme indiqué dans docs.python.org/3/library/itertools.html#itertools-recipes ? J'en ai entendu parler sur stackoverflow.com/questions/11113803Si vous voulez la première ligne et que vous souhaitez effectuer une opération sur le fichier, ce code vous sera utile.
la source
Si le découpage pouvait fonctionner sur les itérateurs ...
la source
la source
Pour généraliser la tâche de lecture de plusieurs lignes d'en-tête et pour améliorer la lisibilité, j'utiliserais l'extraction de méthode. Supposons que vous vouliez symboliser les trois premières lignes de
coordinates.txt
pour utiliser comme informations d'en-tête.Exemple
Ensuite, l'extraction de méthode vous permet de spécifier ce que vous voulez faire avec les informations d'en-tête (dans cet exemple, nous jetons simplement les lignes d'en-tête en fonction de la virgule et les renvoyons sous forme de liste, mais il y a de la place pour faire beaucoup plus).
Production
Si
coordinates.txt
contient une autre ligne d'en-tête, changez simplementnumberheaderlines
. Le meilleur de tous, c'est clair ce qui__readheader(rh, numberheaderlines=2)
se passe et nous évitons l'ambiguïté d'avoir à comprendre ou commenter pourquoi l'auteur de la réponse acceptée utilisenext()
dans son code.la source
Si vous souhaitez lire plusieurs fichiers CSV à partir de la ligne 2, cela fonctionne comme un charme
(cela fait partie de la réponse de Parfait à une autre question)
la source
la source