Nous avons un gros fichier de données brutes que nous aimerions découper à une taille spécifiée. J'ai de l'expérience en .net c #, mais j'aimerais le faire en python pour simplifier les choses et par intérêt.
Comment procéder pour obtenir les N premières lignes d'un fichier texte en python? Le système d'exploitation utilisé aura-t-il un effet sur l'implémentation?
Réponses:
Python 2
Python 3
Voici une autre façon (à la fois Python 2 et 3)
la source
la source
f = open("file")
sans exception la manipulation pour fermer le dossier. La manière pythonique de gérer les fichiers est avec un gestionnaire de contexte, c'est-à-dire en utilisant l'instruction with. Ceci est couvert dans le didacticiel Python d'entrée-sortie ."It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way."
Si vous voulez lire les premières lignes rapidement et que vous ne vous souciez pas des performances, vous pouvez utiliser
.readlines()
quel objet de liste renvoie, puis découper la liste.Par exemple pour les 5 premières lignes:
Un avantage par rapport aux autres réponses est la possibilité de sélectionner facilement la plage de lignes, par exemple en sautant les 10 premières lignes
[10:30]
ou les 10 dernières[:-10]
ou en ne prenant que des lignes paires[::2]
.la source
Ce que je fais, c'est appeler les N lignes en utilisant
pandas
. Je pense que les performances ne sont pas les meilleures, mais par exemple siN=1000
:la source
nrows
option, qui peut être définie sur 1000 et le fichier entier n'est pas chargé. pandas.pydata.org/pandas-docs/stable/generated/… En général, pandas a ceci et d'autres techniques d'économie de mémoire pour les gros fichiers.sep
pour définir un délimiteur de colonne (qui ne devrait pas se produire dans un fichier non-csv)pandas.read()
fonction dans la documentation, connaissez-vous des informations sur le sujet?Il n'y a pas de méthode spécifique pour lire le nombre de lignes exposées par l'objet fichier.
Je suppose que le moyen le plus simple serait de suivre:
la source
Basé sur la réponse la plus votée de gnibbler (20 novembre 09 à 0:27): cette classe ajoute la méthode head () et tail () au fichier object.
Usage:
la source
Les deux façons les plus intuitives de le faire seraient:
Itérez sur le fichier ligne par ligne et
break
après lesN
lignes.Itérez le fichier ligne par ligne en utilisant la
next()
méthodeN
times. (Il s'agit essentiellement d'une syntaxe différente pour ce que fait la réponse principale.)Voici le code:
En fin de compte, tant que vous n'utilisez pas
readlines()
ouenumerate
n'introduisez pas le fichier entier en mémoire, vous avez de nombreuses options.la source
manière la plus pratique par moi-même:
Solution basée sur la compréhension de liste La fonction open () supporte une interface d'itération. Enumerate () couvre open () et retourne les tuples (index, item), puis nous vérifions que nous sommes dans une plage acceptée (si i <LINE_COUNT) et ensuite imprimons simplement le résultat.
Profitez du Python. ;)
la source
[next(file) for _ in range(LINE_COUNT)]
.Pour les 5 premières lignes, faites simplement:
la source
Si vous voulez quelque chose qui évidemment (sans chercher des trucs ésotériques dans les manuels) fonctionne sans importations et essayez / sauf et fonctionne sur une bonne gamme de versions de Python 2.x (2.2 à 2.6):
la source
Si vous avez un très gros fichier, et en supposant que vous voulez que la sortie soit un tableau numpy, l'utilisation de np.genfromtxt gèlera votre ordinateur. C'est tellement mieux d'après mon expérience:
la source
À partir de Python 2.6, vous pouvez profiter de fonctions plus sophistiquées dans la classe de base IO. Ainsi, la réponse la mieux notée ci-dessus peut être réécrite comme suit:
(Vous n'avez pas à vous soucier du fait que votre fichier contient moins de N lignes car aucune exception StopIteration n'est levée.)
la source
lines
mais l'argument fait référence àbytes
.Cela a fonctionné pour moi
la source
Cela fonctionne pour Python 2 et 3:
la source
la source
Cette méthode a fonctionné pour moi
la source