J'ai un script pour rechercher les répertoires créés il y a 3 mois (dans OperDir), et pour les répertoires créés il y a un an (DelDir). Il prend des noms de répertoire et crée des fichiers .txt avec ces noms de répertoire. Cela fonctionne correctement sous Windows, mais ne crée pas de fichiers sous Linux, même sous la racine. Pourrait-il être un problème avec les autorisations ou autre chose? Voici le code:Le script Python ne crée pas de fichier texte sous Linux
import os, time, sys
from os.path import join, getsize, isfile, isdir, splitext
import ctypes
import platform
from os import path
import shutil
import logging
from logging import handlers
from datetime import datetime, timedelta
def checkTime(timed):
curr_time = str(time.gmtime())
year_st = curr_time.find('tm_year') + 8
year_fin = curr_time.find('tm_mon') - 2
year = int(curr_time[year_st:year_fin:1])
month_st = curr_time.find('tm_mon') + 7
month_fin = curr_time.find('tm_mday') - 2
month = int(curr_time[month_st:month_fin:1])
day_st = curr_time.find('tm_mday') + 8
day_fin = curr_time.find('tm_hour') - 2
day = int(curr_time[day_st:day_fin:1])
if timed == 'year':
return year
elif timed == 'month':
return month
elif timed == 'day':
return day
def split(path):
head, tail = os.path.split(path)
return tail
def moveFileOperativeTest(pathOper, pathDelete, nameOper):
logfile = open('MovedFilesLog.txt', 'a+')
logfile.write(str(checkTime('day')) + '.' + str(checkTime('month')) + '.' + str(checkTime('year')) + ' - ' + "File '%s' will be moved from '%s' to the '%s'.\n" % (nameOper, pathOper, pathDelete))
logfile.close
'''with open('MovedFilesLog.txt', 'a') as logfile:
logfile.write(checkTime('day') + '.' + checkTime('month') + '.' + checkTime('year') + ' - ' + "File '%s' will be moved from '%s' to the '%s'.\n" % (nameOper, pathOper, pathDelete))
logfile.close()'''
def removeFileTest(pathDelete, nameDelete):
logfile = open('RemovedFilesLog.txt', 'a+')
logfile.write(str(checkTime('day')) + '.' + str(checkTime('month')) + '.' + str(checkTime('year')) + ' - ' + "File '%s' will be removed from '%s' directory.\n" % (nameDelete, pathDelete))
logfile.close
'''with open('RemovedFilesLog.txt', 'a') as logfile:
logfile.write(checkTime('day') + '.' + checkTime('month') + '.' + checkTime('year') + ' - ' + "File '%s' will be removed from '%s' directory.\n" % (nameDelete, pathDelete))
logfile.close()'''
def pathed(pathOper, pathDelete, yearOper, monthOper, dayOper, yearDel, monthDel, dayDel):
for dirname, dirnames, filenames in os.walk(pathOper):
for subdirname in dirnames:
dirpath = os.path.join(dirname, subdirname)
if getCreationDate(dirpath, 'day') == dayOper and getCreationDate(dirpath, 'month') == monthOper and getCreationDate(dirpath, 'year') == yearOper:
nameOper = split(dirpath)
print "opername = " +nameOper
moveFileOperativeTest(pathOper, pathDelete, nameOper)
#moveFileOperative(pathOper, pathDelete, nameOper)
for dirname, dirnames, filenames in os.walk(pathDelete):
for subdirname in dirnames:
dirpath = os.path.join(dirname, subdirname)
if getCreationDate(dirpath, 'day') == dayOper and getCreationDate(dirpath, 'month') == monthOper and getCreationDate(dirpath, 'year') == yearOper:
nameDelete = split(dirpath)
print 'namedel = ' + nameDelete
removeFileTest(pathDelete, nameDelete)
#removeFile(pathDelete, nameDelete)
print 'Done'
def dateCheck(pathOper, pathDelete):
operVar = 92
delVar = 365
operDate = datetime.now() - timedelta(days=operVar)
delDate = datetime.now() - timedelta(days=delVar)
yearOper = int(str(operDate)[0:4:1])
monthOper = int(str(operDate)[5:7:1])
dayOper = int(str(operDate)[8:10:1])
yearDel = int(str(delDate)[0:4:1])
monthDel = int(str(delDate)[5:7:1])
dayDel = int(str(delDate)[8:10:1])
pathed(pathOper, pathDelete, yearOper, monthOper, dayOper, yearDel, monthDel, dayDel)
def getCreationDate(path, timed):
dict_month = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}
creation = str(time.ctime(os.path.getctime(path)))
month = int(dict_month.get(creation[4:7:1]))
day = int(creation[8:10:1])
year = int(creation[-4::1])
if timed == 'day':
return day
elif timed == 'month':
return month
else:
return year
dateCheck("/opt/***", "/opt/****")
Je suis désolé si c'est une question stupide, je suis nouveau en Python.
Merci pour votre aide.
Bienvenue dans Stack Overflow! Pour vous aider à obtenir une réponse, pourriez-vous essayer de restreindre votre code au plus petit échantillon reproduisant votre erreur? S'il vous plaît lire [Comment créer un MCVE] (http://stackoverflow.com/help/mcve) pour plus de détails sur la façon de poser une bonne question. – JETM
Vous pouvez également être intéressé de savoir que les objets datetime ont des attributs comme year, month, day, ainsi votre fonction dateCheck pourrait éviter tous ces appels 'int (str())' et se référer simplement à 'operDate.month',' operDate. year', et checkTime pourrait juste se référer à 'curr_time = time.gmtime(); curr_time.tm_year' –
Quel message d'erreur obtenez-vous? Veuillez toujours inclure le message d'erreur complet à vos questions. – pts