AttributeError lorsque vous essayez d'utiliser la méthode seek() pour obtenir la dernière ligne du fichier csv
Je suis en train de retourner la dernière ligne d'un fichier csv. Je suis la modification d'une autre fonction que j'ai écrit précédemment que renvoie la dernière ligne d'un fichier texte. Il semblait fonctionner comme prévu au début, mais maintenant quand j'appelle la fonction renvoie une erreur.
reader.seek(0, os.SEEK_END)
AttributeError: '_csv.reader' object has no attribute 'seek'
import os
import csv
def getLastFile(filename):
distance = 1024
with open(filename,'rb') as f:
reader = csv.reader(f)
reader.seek(0, os.SEEK_END)
if reader.tell() < distance:
reader.seek(0, os.SEEK_SET)
lines = reader.readlines()
lastline = lines[-1]
else:
reader.seek(-1 * distance, os.SEEK_END)
lines = reader.readlines()
lastline = lines[-1]
return lastline
Quelqu'un peut-il svp m'aider à modifier mon code? J'étais sûr que vous pouvez utiliser cherchent de cette façon, peut-être que je me trompe?
Pourriez-vous nous donner le fichier csv à travailler avec trop?
Vous pouvez
Je viens de faire un petit .fichier csv avec 20 lignes et 5 colonnes remplies avec des nombres aléatoires. Le code (je crois) doit travailler avec un générique .fichier csv, de retour de la dernière ligne, donc je ne suis pas sûr que ça aiderait si je l'ai posté, mais je pourrais si vous le souhaitez. Merci!
Flute, c'est frustrant!
Je ne pense pas que c'est un doublon à la cible se réfère à "Comment puis-je dire que je suis sur la dernière ligne" - cette question est "Comment puis-je obtenir la dernière ligne,"... ils ne sont pas synonymes...
Vous pouvez
seek
et tell
sur file
objets, mais pas sur csv.reader
des objets aussi loin que je peux dire. Je ne suis pas sûr qu'il y est une bonne façon de le faire en collaboration avec csv.reader
.Je viens de faire un petit .fichier csv avec 20 lignes et 5 colonnes remplies avec des nombres aléatoires. Le code (je crois) doit travailler avec un générique .fichier csv, de retour de la dernière ligne, donc je ne suis pas sûr que ça aiderait si je l'ai posté, mais je pourrais si vous le souhaitez. Merci!
Flute, c'est frustrant!
Je ne pense pas que c'est un doublon à la cible se réfère à "Comment puis-je dire que je suis sur la dernière ligne" - cette question est "Comment puis-je obtenir la dernière ligne,"... ils ne sont pas synonymes...
OriginalL'auteur Thetravellingfool | 2013-11-30
Vous devez vous connecter pour publier un commentaire.
Voici une légère variation de la notion fondamentale dans la accepté de répondre à la question Ont csv.lecteur de dire quand il est sur la dernière ligne appliqué à votre variation du problème. Depuis chaque ligne est potentiellement une longueur différente, il n'y a vraiment aucun moyen d'éviter d'avoir à lire tout le fichier.
Mise à jour
Voici un moyen plus simple et probablement plus rapide de le faire à l'aide d'un
collections.deque
. J'ai eu l'idée de l'une des réponses à la question Comment lire une ligne en sortie contenant une liste d'entiers produits.OriginalL'auteur martineau
csv reader supporte pas chercher, de sorte que vous pouvez obtenir le fichier csv dernière ligne en tant que fichier texte, puis dernière ligne au format csv.
Dans votre code, si la dernière ligne de la longueur > la distance, puis obtiendrez seulement une partie de la dernière ligne.
puis lire csv:
OriginalL'auteur PasteBT