2017-06-21 2 views
1

Je stocke des milliers de séries chronologiques dans .csv fichiers sur un lecteur réseau. Avant de mettre à jour les fichiers, j'obtiens d'abord la dernière ligne du fichier pour voir l'horodatage puis je mets à jour les données après cet horodatage. Comment puis-je obtenir rapidement la dernière ligne d'un fichier .csv sur un lecteur réseau de sorte que je n'ai pas besoin de charger l'intégralité du fichier .csv pour utiliser la dernière ligne?Comment obtenir rapidement la dernière ligne d'un fichier .csv sur un lecteur réseau?

+1

Je trouve la réponse [ici] (https://stackoverflow.com/a/37551666/1367204) – user1367204

Répondre

1

Il y a un chouette reversed outil pour cela, en supposant que vous utilisez le csv module intégré:

how to read a csv file in reverse order in python

En bref:

import csv 
with open('some_file.csv', 'r') as f: 
    for row in reversed(list(csv.reader(f))): 
     print(', '.join(row)) 

Dans mon fichier de test:

1: test, 1 
2: test, 2 
3: test, 3 

Sorties:

test, 3 
test, 2 
test, 1 
+0

Je me sens comme cela va encore lire le fichier en mémoire, alors que ce que je dois est juste pour lire la dernière rangée en mémoire pour ne pas perdre de temps à lire des choses inutiles en mémoire. – user1367204

+0

Vous pourriez essayer d'être plus explicite, sans itération sur chaque ligne par indexation: 'print (',' .join (inversé (list (csv.reader (f)) [- 1])))' Je suis sûr qu'il y a est une meilleure façon de le faire, mais c'est ce qui vient à l'esprit ... – Doug

+0

Je viens de le tester et c'était le même laps de temps = ( – user1367204