0
votes

La commande to_csv pour la boucle ne fonctionne pas comme prévu

J'ai 11 fichiers dans mon annuaire qui commence par "cas-export-". Pour chacun de ces fichiers, je souhaite extraire seulement 5 colonnes comme indiqué dans la variable «Initial_Columns», enregistrez les résultats sur un fichier de données appelé «tout_file» et écrivez le Dataframe 'tout_file' à un CSV. Parce que j'ai 11 fichiers qui correspond à "cas-export-" dans mon annuaire, je devrais avoir 11 CSV générées par mon script.

Lorsque j'exécute les scripts ci-dessous, je n'ai que 1 CSV généré et que CSV dispose de données du fichier le plus récent lu par la boucle pour la boucle. P>

date = dt.datetime.today().strftime("%m_%d_%Y")
directory = '/Users/myname/Downloads/'
initial_columns = ['Case #','Case Subject','Created At','Labels','Body'] 

for file in (glob.glob(directory + 'case-export-*')):
    whole_file=pd.read_csv(file, usecols = initial_columns, encoding='ISO-8859-1', index_col=None, low_memory=False).replace(np.nan, 'blank', regex=True)   
    whole_file.to_csv(directory + 'case_export_trimmed_' + date + '_' + str(now.hour) + '_' + str(now.minute) + '_' + str(now.second) + '.csv')


2 commentaires

Je pense que c'est en raison de l'utilisation du temps et de la date dans le dossier nommant. Chaque nom de fichier sera le même que la boucle complète exécutée dans 1 sec Utilisez plutôt tout_file.to_csv (répertoire + 'casse_export_trimmed_' + str (i) +'CSV ') , incrément i à chaque fois dans la boucle pour la boucle.


Une alternative est de dormir pendant une seconde entre chaque itération: D


3 Réponses :


1
votes

Je pense que la raison de ceci est que maintenant est défini en dehors de la boucle que vous avez. Par conséquent, chaque fois que vous utilisez, c'est à l'aide de la même heure, de la même heure, de la même heure, du nom du fichier CSV et, par conséquent, vous écrasez le seul fichier à chaque fois.

Si vous déplacez le maintenant Définition variable à l'intérieur de votre boucle pour la boucle, il devrait fonctionner: xxx

* Modifier : également déplacé Date de la définition à l'intérieur de votre boucle pour obtenir une date précise

Je ferais aussi ce qui suit pour générer le nom du fichier: xxx


0 commentaires

0
votes

Il semble que vous auriez pu déclarer la variable «date» et «maintenant» à l'extérieur de la boucle, ce qui signifie

'tout_file.to_csv (répertoire +' casse_export_trimmed_ '+ date +' '+ str (maintenant.hour) +' '+ str (maintenant.minute) +' _ '+ STR (maintenant .seconde) + '.csv') '

passera sur l'écriture sur le même fichier pour chacune des 11 itérations, vous ne verrez donc que les 11èmes détails de l'itération dans le fichier de sortie


0 commentaires

0
votes

Généralement, une meilleure solution à utiliser la date (heure / min / seconde), consiste à maintenir l'ancien nom de fichier mais préfixe ou suffixez-le avec TopMed: xxx

de cette façon de faire Avoir un enregistrement / compréhension plus claire de regarder les noms de fichiers ce qui s'est passé / l'intention était ...


0 commentaires