Lecture de tous les fichiers csv à partir d'un répertoire à l'aide de Python
J'espère que ce n'est pas trivial, mais je me pose des questions suivantes:
Si j'ai un dossier spécifique avec n csv
fichiers, comment pourrais-je de manière itérative lire tous, un à un, et d'effectuer certains calculs sur leurs valeurs?
Pour un seul fichier, par exemple, je fais quelque chose comme ça et d'effectuer certains calculs sur le x
tableau:
import csv
import os
directoryPath=raw_input('Directory path for native csv file: ')
csvfile = numpy.genfromtxt(directoryPath, delimiter=",")
x=csvfile[:,2] #Creates the array that will undergo a set of calculations
Je sais que je peux vérifier combien de csv
de fichiers dans un dossier donné (vérifier ici):
import glob
for files in glob.glob("*.csv"):
print files
Mais je n'ai pas réussi à comprendre comment, éventuellement, nest la numpy.genfromtxt()
fonction dans une boucle for, de sorte que j'ai lu dans tous les csv les fichiers d'un répertoire que c'est à moi de le préciser.
MODIFIER
Le dossier que j'ai seulement a jpg
et csv
fichiers. Ces derniers sont nommés eventX.csv
, où X varie de 1 à 50. Le for
boucle, je me réfère à devraient donc prendre en compte les noms de fichier de la façon dont ils sont.
OriginalL'auteur FaCoffee | 2015-11-03
Vous devez vous connecter pour publier un commentaire.
C'est ce que je ferais:
f.close()
ligne être placé juste après j'définirx=csvfile[:,2]
? Le nombre2
est juste exemplificative.Et, si je peux ajouter, c'est votre code de vérification pour tous les
csv
fichiers dans TOUS les dossiersdirectory
?comme une note, la méthode recommandée pour l'ouverture de fichiers est
with open(file) as file
cela a l'avantage de fermer automatiquement lorsque vous êtes hors de portéepour votre première question: vous pouvez le faire mais vous ne serez pas en mesure de faire toute autre opération sur le fichier. Comme pour le second, il n'répertorie tous les fichiers dans un répertoire. Si vous voulez tous les fichiers de tous les dossiers à l'intérieur d'un direcory vous pouvez stocker chaque dossier de répertoire dans une liste et obtenir les .csv à partir de chaque dossier à la fois.
OriginalL'auteur
Je pense que vous voyez quelque chose comme ce
Modifier
Si vous voulez obtenir tous les
csv
fichiers d'un dossier (y compris le sous-dossier) vous pouvez utilisersubprocess
au lieu deglob
(à noter que ce code ne fonctionne que sur les systèmes linux)Il recherche en premier le dossier et sous-dossiers pour tous file_names à l'aide de la
find
commande du shell et applique vos calculs par la suite.csv
fichiers nomméfile_1.csv
,file_2.csv
, etfile_3.csv
, chacun de qui a de la valeur1
,2
, et3
comme valeur unique (sans en-tête). Puis j'ai crééa=numpy.zeros(3)
de le remplir avec ces valeurs, mais je reçoisa=([0,0,0])
. Dans lefor
boucle, les nouvelles valeurs dea
sont affectés comme ceci:a[file_name]=numpy.genfromtxt(file_name,delimiter=',')[0,0]
. Au lieu dea=([1,2,3])
- je obtenira=([0,0,0])
.Hmm ... il a travaillé pour mes exemples simples ... laissez-moi vérifier ce qui pourrait aller mal ...
est une chaîne de caractères dans mon code ... que voulez-vous dire avec
a[file_name]
?a[...]
nécessite un entier ... ne sont pas là toutes les erreurs?Non, pas d'erreurs. J'ai été de tenter de l'utiliser
file_name
comme une variable de compteur puisqu'elle porte le nombre exact de fichiers (et de valeurs) de ce cas de test. J'ai fait cela juste pour tester votre indice. Si nous ne pouvons pas utiliserfile_name
comme compteur, que pourrions-nous utiliser? Doit-on ajouter une boucle imbriquée pour ajouter un compteur allant de 1 à 3?Oh, puis le problème est que vous utilisez Windows, parce que (pour autant que je sache) la commande
find
n'existe pas (ou ne fonctionne pas) que j'ai utilisé dans mon programme. ... Hmm, laissez-moi voir si je peux réécrire la partie afin de travailler pour vousOriginalL'auteur plonser
Selon la la documentation de
numpy.genfromtxt()
, le premier argument peut être unQui signifie que vous pourriez écrire un générateur qui donne les lignes de tous les fichiers comme ceci:
devrait fonctionner. (Je n'ai pas de numpy installé, donc ne peut pas tester facilement)
for
boucle?nonono, il est passé dans le générateur, et en tant que tel obtient tous les fichiers
OriginalL'auteur Ward