AIM: Je voulais enregistrer tous les fichiers sur une variété de disque dur et recueille le nom de fichier, les dossiers, et la taille du fichier en mégaoctets. Le code s'exécute, à ma connaissance ne produit pas d'erreurs, mais ne produit pas le fichier csv à la fin?Le code python ne génère pas le fichier csv
Ce que j'ai essayé: J'ai essayé d'exécuter le fichier avec Sudo, en changeant les permissions avec chmod + x, vérifier que python est au même endroit pour l'utilisateur standard et pour les utilisateurs de sudo, et enfin la suppression ou commenter des lignes gênantes qui semblent donner des résultats ou des erreurs différents selon le système d'exploitation.
import os
from os import path
import sys
import datetime
from datetime import date, time, timedelta
import time
import csv
#from socket import gethostbyname
#variables
#hostname = str(socket.gethostname())
scandir = "/"
savefiledir = "/Users/joshua/Documents/python/"
textfilename = str(datetime.datetime.now().strftime("%Y-%m-%d")) + "_" "directory_printer.csv"
#change directory to the root directory or the one which you want to scan for files (scandir)
os.getcwd()
os.chdir(scandir)
directory = os.getcwd()
#find all files in a directory and it's sub directory regardless of extension
results = [val for sublist in [[os.path.join(i[0], j) for j in i[2]] for i in os.walk(directory)] for val in sublist]
d = {}
file_count = 0
metadata = []
for file in results:
#full path
try:
fullpath = file
except:
fullpath = None
#file name
try:
file_directory = "/".join(str(file).split('/')[1:-1])
except:
file_directory = None
#file extension
try:
file_ext = str(file).split('/')[-1]
except:
file_ext = None
#subfolders
try:
parts = file_directory.split('/')
sub_folders = ":".join(parts[1:-1])
except:
sub_folders = None
#num subfolders
try:
count_subfolders = len(sub_folders.split(':'))
except:
count_subfolders = None
#filesize megabytes
try:
filesize_mb = os.path.getsize(file)/1024
except:
filesize_mb = None
#date modified
try:
date_modified = datetime.datetime.now() - datetime.datetime.fromtimestamp(path.getmtime(file))
except:
date_modified = None
#time modified
#try:
# time_modified = os.stat(fullpath).st_mtime #time of most recent content modification
#except:
# time_modified = None
#time created (windows)
# try:
# time_created = os.stat(fullpath).st_ctime #platform dependent; time of most recent metadata change on Unix, or the time of creation on Windows)# except:
# time_created = None
#record all file metadata
d[file_count] = {'Full_Path': fullpath, 'File_Directory': file_directory,
'File_Extension': file_ext, 'List_Sub_Folders' : sub_folders,
'Count_Sub_Folders' : count_subfolders, 'Filesize_mb' : filesize_mb,
'Date_Modified' : date_modified}
file_count = file_count + 1
#write the dictinary with the disks file metadata to a csv file
with open(textfilename,'w') as f:
w = csv.writer(f)
w.writerows(d.items())
print("Scanning directory: "
+ str(scandir) + " complete!" + "\n"
+ "The results have been saved to: " + "\n"
+ str(savefiledir)+str(textfilename))
Probablement pas le problème, mais il faut vérifier que 'results' n'est pas vide, par exemple par en insérant un 'print (len (results))' avant votre boucle for. Plus généralement, insérez du code de débogage pour voir ce qui se passe, si vous ne l'avez pas déjà fait. – bli
Du point de vue du dépannage, pouvez-vous écrire quelque chose sur le disque? Ce qui signifie, si vous exécutez simplement quelque chose comme: avec open (TextFileName, 'w') comme f: w = csv.writer (f) w.write ('un texte aléatoire) Est-ce que ces trois lignes à écrire disque? Si non, alors le problème est d'écrire sur le disque Si oui, alors le problème est votre code >>> peut-être d.items() est vide, etc. –
@ E.Ducateme le code de l'utilisateur AT jdehesa a résolu le problème, J'écrivais le csv final dans un répertoire différent. – yoshiserry