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?
Répondre
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
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
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
Je viens de le tester et c'était le même laps de temps = ( – user1367204
Je trouve la réponse [ici] (https://stackoverflow.com/a/37551666/1367204) – user1367204