Visualizzazione post con etichetta python. Mostra tutti i post
Visualizzazione post con etichetta python. Mostra tutti i post

martedì 21 novembre 2023

Calcolo in python dei giorni lavorativi (lunedì venerdì) per anno 2023, escludendo le feste se capitano dal lunedì al venerdì.

Questo è un esempio di un calcolo in python dei giorni lavorativi (lunedì venerdì) per anno 2023, escludendo le feste se capitano dal lunedì al venerdì. La Pasquetta e il S.Patrono sono variabili ma le altre sono fisse: 1 e 6 gennaio, 10 aprile pasquetta per il 2023, 25 aprile, 1 maggio, 2 giugno, 29 giugno (S.Patrono a Roma), 15 agosto, 1 novembre, 8 dicembre, 25 e 26 dicembre. Il secondo script è parziale per la scrittura del mese e dei giorni. Sostitutendo l'anno si potranno avere altri risultati, ma ricordarsi di inserire il giorno di Pasquetta corretto. Basta copiare gli script in un qualsiasi editor online per eseguire una verifica.

#calcolo del numero di giorni lavorativi all'anno, per esempio il 2023
from datetime import date, timedelta

def count_weekdays_excluding_holidays(year, holidays):
    start_date = date(year, 1, 1)
    end_date = date(year, 12, 31)
    total_weekdays = 0

    holidays_set = set(date(year, int(d.split('/')[1]), int(d.split('/')[0])) for d in holidays)

    current_date = start_date
    while current_date <= end_date:
        if current_date.weekday() < 5 and current_date not in holidays_set:
            total_weekdays += 1
        current_date += timedelta(days=1)

    return total_weekdays

# Festività 2023
holidays_2023 = ["1/1", "6/1", "10/4", "25/4", "1/5", "2/6", "29/6",
"15/8", "1/11", "8/12", "25/12", "26/12"]

print(count_weekdays_excluding_holidays(2023, holidays_2023))

#-------------------------------------------------------------------------------------

#calcolo del numero di giorni lavorativi all'anno per mese, in questo caso il 2023, con scrittura del mese e numero giorni
from datetime import date, timedelta
import calendar

def monthly_working_days(year, holidays):
    monthly_days = {}

    holidays_set = set(date(year, int(d.split('/')[1]), int(d.split('/')[0])) for d in holidays)

    for month in range(1, 13):
        total_days = 0
        for day in range(1, calendar.monthrange(year, month)[1] + 1):
            current_date = date(year, month, day)
            if current_date.weekday() < 5 and current_date not in holidays_set:
                total_days += 1
        month_name = calendar.month_name[month]
        monthly_days[month_name] = total_days

    return monthly_days

# Festivi
holidays_2023 = ["1/1", "6/1", "10/4", "25/4", "1/5", "2/6", "29/6", "15/8", "1/11", "8/12", "25/12", "26/12"]
monthly_working_days_2023 = monthly_working_days(2023, holidays_2023)
print(monthly_working_days_2023)

#Risultato: {'January': 21, 'February': 20, 'March': 23, 'April': 18, 'May': 22, 
'June': 20, 'July': 21, 'August': 22, 'September': 21, 'October': 22, 'November': 21, 'December': 18}

lunedì 23 maggio 2016

Eseguire un file Python

Sia su Linux che su Windows è possibile eseguire un file scritto in Python con estensione ".py"
Il link di riferimento del sito ufficiale è http://www.python.org ma posso elencare alcuni semplici step.
Come primo step bisogna installare Python (vedere su http://www.python.org);
il secondo step, in Windows, è posizionarsi tramite command line sulla directory di Python (ad esempio c:\Python27) e digitare:
python nomefile.py
# oppure
python "c:\directory\nomefile.py"
# oppure andare sulla directory del nomefile.py e digitare
c:\Python27\python.exe nomefile.py
Tutto qui. Poi ovviamente si possono aggiungere opzioni a questo comando a seconda delle richieste del programma scritto in Python.
In ambiente Linux è molto più semplice specie nelle ultime versioni perchè lo hanno già installato, altrimenti per una vecchia distro bisognerà procedere all'installazione.
L'esecuzione è altrettanto semplice; andare sul percorso del nomefile.py e digitare:
python nomefile.py

mercoledì 10 ottobre 2012

Una macro in WinCvs per la copia di uno o più file in Python

L'esempio seguente è la creazione di una macro in WinCvs 2.0 e permette di selezionare uno o più file da una directory e copiarli in un' altra mantenendo il path iniziale.
Potrebbe essere utile per creare un pacchetto di file.
Ecco come fare:
- chiudere eventualmente WinCvs se aperto;
- creare il file AddFileToDirTest.py nella directory ".../wincvs/Macros";
- copiare il codice qui sotto;
- modificare eventualmente i path o parametri all'interno della macro;
- riavviare WinCvs (ricordarsi di avere python installato sul pc e aver fatto riferimento nelle impostazioni sulla dll di python);
- selezionare i file da copiare;
- selezionare la macro AddFileToDirTest.

# start copy here
from cvsgui.Macro import *
from cvsgui.CvsEntry import *
from cvsgui.ColorConsole import *
import cvsgui.App, os.path, os
import string
import copy
import shutil

class AddFileToDirTest(Macro):
 def __init__(self):
  Macro.__init__(self, "AddFileToDirTest", MACRO_SELECTION, 0, "Add File To Dir Test")

 def CreaDirectory(self,dirFile):
  if not os.path.isdir(dirFile):
   os.makedirs(dirFile)
   print "- directory created: " + dirFile
 
 def OnCmdUI(self, cmdui):
  sel = cvsgui.App.GetSelection()
  isOnlyExistingFiles = len(sel) > 0
  for s in sel:
   if not s.IsFile() or s.IsMissing():
    isOnlyExistingFiles = 0
    break

  cmdui.Enable(isOnlyExistingFiles)
  if isOnlyExistingFiles:
   cmdui.SetText("Add File selected to Directory")
  else:
   cmdui.SetText("Click on file to select")

 def Run(self):
  print "* Add file in progress... *"
  
  #+--------- start set here--------+
  #example directory root: c:\temp\test
  pathComuneDoveCopiareIFile ="c:\\" + "temp" + "\\" 
  nomeDirectoryComuneATuttiIProgetti="test" #insert the name into common directory
  #+--------- stop set here --------+
  
  sel = cvsgui.App.GetSelection()
  paths = []
  for s in sel:
   paths.append(s.GetFullName())
   nomeFile=os.path.split(s.GetFullName())
  
  dir = os.path.dirname(os.path.commonprefix(paths))
  print "- directory selected: ", dir
  where = dir.find(nomeDirectoryComuneATuttiIProgetti)      
  dirReplace = dir[(where):]
  dirDaCreare= pathComuneDoveCopiareIFile + dirReplace
  self.CreaDirectory(dirDaCreare)
 
  for s in sel:
   paths.append(s.GetFullName())
   nomeFile=os.path.split(s.GetFullName())
   pathDoveCopiare = dirDaCreare + "\\" + nomeFile[1]
   print "- copy file in:" + pathDoveCopiare
   shutil.copyfile(s.GetFullName(), pathDoveCopiare)
   print "-- filename copied: " + nomeFile[1]
   
  print "* End elaboration *"


AddFileToDirTest()
# end copy here
Un esempio in questa figura: