J'utilise python (Django Framework) pour lire un fichier CSV. Je tire juste 2 lignes de ce CSV comme vous pouvez le voir. Ce que j'ai essayé de faire est de stocker dans une variable le nombre total de lignes du CSV également.
Comment puis-je obtenir le nombre total de lignes?
file = object.myfilePath
fileObject = csv.reader(file)
for i in range(2):
data.append(fileObject.next())
J'ai essayé:
len(fileObject)
fileObject.length
file_read
? Est-ce un descripteur de fichier (comme dansfile_read = open("myfile.txt")
?Réponses:
Vous devez compter le nombre de lignes:
L'utilisation
sum()
avec une expression de générateur constitue un compteur efficace, évitant de stocker tout le fichier en mémoire.Si vous avez déjà lu 2 lignes pour commencer, vous devez ajouter ces 2 lignes à votre total; les lignes qui ont déjà été lues ne sont pas comptées.
la source
\x1A
) dans le fichier? Comment avez-vous ouvert le fichier?file.seek(0)
puisfileObject = csv.reader(file)
2018-10-29 MODIFIER
Merci pour les commentaires.
J'ai testé plusieurs types de code pour obtenir le nombre de lignes dans un fichier csv en termes de vitesse. La meilleure méthode est ci-dessous.
Voici le code testé.
Le résultat était ci-dessous.
En conclusion,
sum(1 for line in f)
c'est le plus rapide. Mais il pourrait ne pas y avoir de différence significative aveclen(f.readlines())
.sample_submission.csv
est de 30,2 Mo et contient 31 millions de caractères.la source
for row in csv_reader:
solution lorsque le CSV est censé contenir des retours à la ligne valides entre guillemets selon rfc4180 . @dixhom quelle était la taille du fichier que vous avez testé?Pour ce faire, vous devez avoir un peu de code comme mon exemple ici:
J'espère que cela aide tout le monde.
la source
%time sum(1 for row in open("df_data_raw.csv"))
coût 4,91 s et%time len(open("df_data_raw.csv").readlines())
14,6 s.Plusieurs des suggestions ci-dessus comptent le nombre de LIGNES dans le fichier csv. Mais certains fichiers CSV contiennent des chaînes entre guillemets qui contiennent elles-mêmes des caractères de nouvelle ligne. Les fichiers MS CSV délimitent généralement les enregistrements avec \ r \ n, mais utilisent \ n seuls dans des chaînes entre guillemets.
Pour un fichier comme celui-ci, compter les lignes de texte (délimitées par une nouvelle ligne) dans le fichier donnera un résultat trop volumineux. Donc, pour un décompte précis, vous devez utiliser csv.reader pour lire les enregistrements.
la source
Vous devez d'abord ouvrir le fichier avec open
Ensuite, utilisez le csv.reader pour ouvrir le csv
Enfin, vous pouvez prendre le numéro de ligne avec l'instruction 'len'
Le code total est le suivant:
N'oubliez pas que si vous souhaitez réutiliser le fichier csv, vous devez créer un input_file.fseek (0), car lorsque vous utilisez une liste pour le reader_file, il lit tous les fichiers et le pointeur dans le fichier change de position
la source
row_count = sum(1 for line in open(filename))
travaillé pour moi.Remarque:
sum(1 for line in csv.reader(filename))
semble calculer la longueur de la première lignela source
la source
file_read
est apparemment uncsv.reader()
objet, il n'a donc pas avoir unereadlines()
méthode..readlines()
doit créer une liste potentiellement volumineuse, que vous rejetez à nouveau.lorsque vous instanciez un objet csv.reader et que vous itérez le fichier entier, vous pouvez accéder à une variable d'instance appelée line_num fournissant le nombre de lignes:
la source
la source
Utilisez "liste" pour adapter un objet plus pratique.
Vous pouvez alors compter, sauter, muter jusqu'au désir de votre cœur:
la source
Cela fonctionne pour csv et tous les fichiers contenant des chaînes dans les systèmes d'exploitation basés sur Unix:
Si le fichier csv contient une ligne de champs, vous pouvez en déduire une
numOfLines
ci-dessus:la source
Vous pouvez également utiliser une boucle for classique:
la source
peut vouloir essayer quelque chose d'aussi simple que ci-dessous dans la ligne de commande:
sed -n '$=' filename
ouwc -l filename
la source
Je pense que nous pouvons améliorer un peu la meilleure réponse, j'utilise:
De plus, il ne faut pas oublier que le code pythonique n'a pas toujours les meilleures performances dans le projet. Par exemple: si nous pouvons faire plus d'opérations en même temps dans le même jeu de données, il vaut mieux faire tout dans le même noyau au lieu de faire deux ou plusieurs bucles pythoniques.
la source
la source
essayer
et dans la sortie, vous pouvez voir quelque chose comme (aa, bb) où aa est le # de lignes
la source
data.shape[0]