Topic: PythonCode su datetime  (Letto 462 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Valentina9213

  • python unicellularis
  • *
  • Post: 11
  • Punti reputazione: 0
    • Mostra profilo
PythonCode su datetime
« il: Ottobre 20, 2020, 16:34 »
Ciao a tutti. Avrei bisogno di un aiutino.
Ho questo codice Python dove inserisco i mesi e gli anni di una piattaforma che é in grado di trasmettere dati per l'inquinamento atmosferico.

numAQP = input("Inserisci il numero della AQP:")
mese_iniziale = input("Inserisci il mese iniziale:")
anno_iniziale = input("Inserisci anno iniziale:")

mese_finale = input("Inserisci il mese_finale:")
anno_finale = input("Inserisci anno_finale:")

data_iniziale = 1
data_finale = 31

for anno_count in (anno_iniziale, anno_finale):
    for month_count in (mese_iniziale, mese_finale):
        for single_date in range(data_iniziale, data_finale):
            data_giusta = str(anno_count) + '-' + str(month_count) + '-' + str(single_date)
            print(data_giusta)


Non metto la url per questioni personali, il mio problema é:
Se io con input dal terminale metto:
(mese_iniziale) = 01
(mese_finale) = 01

(anno_iniziale) = 2020
(anno_finale) = 2020

data_giusta = str(anno_count) + '-' + str(month_count) + '-' + str(single_date)

Questo pezzo di codice che concatena "YYYY-mm-dd"
mi stampa:
dal 2020-01-01 fino al 2020-01-30, ripetuto 3 o 4 volte.

Mi sapreste aiutare? :)
Grazie in anticipo
 

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #1 il: Ottobre 20, 2020, 19:59 »
Beh, non so che cosa vorresti che facesse... (anno_iniziale, anno_finale) è una tupla di due elementi, quindi "for ... in ..." ciclerà due volte su quelli Poi sotto c'è un'altra tupla di due elementi... altri due cicli... 2 per 2 fa 4 (e sì, fa proprio 4... non fa "tre o quattro"). Quindi ripeterai 4 volte qualsiasi cosa tu faccia nel terzo "for" annidato.

Come sempre in questi casi, suggerisco lo studio approfondito di un buon manuale su Python (il Lutz è sempre una scelta sicura), come premessa utile alla programmazione in Python.

(PS: a parte che poi, naturalmente, quello che stai cercando di fare non avrebbe molte possibilità di riuscita neanche se avessi capito alla perfezione come funziona "for"... non puoi costruire una sequenza di date semplicemente assemblando dei numeri... altrimenti ti ritrovi con cose come "31 febbraio"... quindi o ti costruisci una logica raffinata, magari che tenga pure conto dei bisestili, oppure, come fanno tutti, usi il modulo datetime della libreria standard che fa il lavoro per te.)

Offline Valentina9213

  • python unicellularis
  • *
  • Post: 11
  • Punti reputazione: 0
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #2 il: Ottobre 21, 2020, 10:56 »
Ti ringrazio per la tua risposta, ma è stato un task lavorativo fare cosí il codice.
E soprattutto non posso usare la libreria datetime, mi sarei semplificata la vita, non è stata una mia scelta.

« Ultima modifica: Ottobre 21, 2020, 11:02 da Valentina9213 »

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #3 il: Ottobre 21, 2020, 14:15 »
ma non puoi perché te lo ha proibito il dottore?
guarda che fa parte della libreria standard, eh... basta fare import datetime
mah... saprai tu.
il consiglio resta di studiare python, prima di imbarcarsi in un progetto vero...

Offline Valentina9213

  • python unicellularis
  • *
  • Post: 11
  • Punti reputazione: 0
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #4 il: Ottobre 27, 2020, 09:43 »
Ne sono venuta a capo. Un ultima domanda, scrivendo il code in questo modo:

numAQP = input("Inserisci il numero della AQP:")
mese_iniziale = input("Inserisci il mese iniziale:")
anno_iniziale = input("Inserisci anno iniziale:")

mese_finale = input("Inserisci il mese_finale:")
anno_finale = input("Inserisci anno_finale:")
data_iniziale=1
data_finale=32

i = 1

for month_count in (mese_iniziale, mese_finale):
    single_data = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17',
                   '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32']
    #print(type(single_data))
    while i < len(single_data):
        #print('singledata', single_data[i])
        #print('mounth_count', month_count)
        #print('i', i)
        data_giusta = str(anno_iniziale) + '-' + str(month_count) + '-' + str(i)
        print(data_giusta)
        i = i + 1
        url = 'url' + numAQP + '/csv?start_date=' + str(
            data_giusta) + '&end_date=' + str(data_giusta)
        print(url)


Indipendentemente che non tutti i mesi hanno 30 o 31, specialmente Febbraio che ha 28 giorni. Lo aggiusteró dopo.
Comunque devo fare attenzione all'attraversamento dell'anno.
Che cosa mi consigliate di fare?

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 352
  • Punti reputazione: 0
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #5 il: Ottobre 27, 2020, 14:21 »
imho il consiglio "giusto" Te lo ha dato @RicPol, assurdo ci sia motivo di NON usare una libreria standard di python in uno script python ... basato sul Tuo input, prova questo :
import datetime

def get_urls(aqp, start_d, limit_d):
    urls = []
    while start_d < limit_d - datetime.timedelta(days=1):
        l1 = [str(start_d.year), str(start_d.month), str(start_d.day)]
        start_d += datetime.timedelta(days=1)
        l2 = [str(start_d.year), str(start_d.month), str(start_d.day)]
        url = ('url' + aqp + '/csv?start_date=' + '-'.join(l1) +
               '&end_date=' + '-'.join(l2))
        urls.append(url)
    return urls

numAQP = input("Inserisci il numero della AQP:")
mese_iniziale = input("Inserisci il mese iniziale:")
anno_iniziale = input("Inserisci anno iniziale:")
start_date = datetime.date(int(anno_iniziale), int(mese_iniziale), 1)

mese_finale = input("Inserisci il mese_finale:")
anno_finale = input("Inserisci anno_finale:")
limit_date = datetime.date(int(anno_finale), int(mese_finale)+1, 1)

my_urls = get_urls(numAQP, start_date, limit_date)

for u in my_urls:
    print(u)


hai risolto "di colpo" numero dei giorni nel mese, anni bisestili ed eventuale "scavalco" di anni, oltre che intervalli di date generiche, vedi giù per i bisestili:
============== RESTART: /home/nuzzopippo/my_tmp/test/valentina2.py ==============
Inserisci il numero della AQP:01
Inserisci il mese iniziale:2
Inserisci anno iniziale:2020
Inserisci il mese_finale:2
Inserisci anno_finale:2020
url01/csv?start_date=2020-2-1&end_date=2020-2-2
url01/csv?start_date=2020-2-2&end_date=2020-2-3
url01/csv?start_date=2020-2-3&end_date=2020-2-4
url01/csv?start_date=2020-2-4&end_date=2020-2-5
url01/csv?start_date=2020-2-5&end_date=2020-2-6
url01/csv?start_date=2020-2-6&end_date=2020-2-7
url01/csv?start_date=2020-2-7&end_date=2020-2-8
url01/csv?start_date=2020-2-8&end_date=2020-2-9
url01/csv?start_date=2020-2-9&end_date=2020-2-10
url01/csv?start_date=2020-2-10&end_date=2020-2-11
url01/csv?start_date=2020-2-11&end_date=2020-2-12
url01/csv?start_date=2020-2-12&end_date=2020-2-13
url01/csv?start_date=2020-2-13&end_date=2020-2-14
url01/csv?start_date=2020-2-14&end_date=2020-2-15
url01/csv?start_date=2020-2-15&end_date=2020-2-16
url01/csv?start_date=2020-2-16&end_date=2020-2-17
url01/csv?start_date=2020-2-17&end_date=2020-2-18
url01/csv?start_date=2020-2-18&end_date=2020-2-19
url01/csv?start_date=2020-2-19&end_date=2020-2-20
url01/csv?start_date=2020-2-20&end_date=2020-2-21
url01/csv?start_date=2020-2-21&end_date=2020-2-22
url01/csv?start_date=2020-2-22&end_date=2020-2-23
url01/csv?start_date=2020-2-23&end_date=2020-2-24
url01/csv?start_date=2020-2-24&end_date=2020-2-25
url01/csv?start_date=2020-2-25&end_date=2020-2-26
url01/csv?start_date=2020-2-26&end_date=2020-2-27
url01/csv?start_date=2020-2-27&end_date=2020-2-28
url01/csv?start_date=2020-2-28&end_date=2020-2-29
>>>

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #6 il: Ottobre 27, 2020, 21:04 »
@nunzio
> assurdo ci sia motivo di NON usare una libreria standard di python in uno script python

No, possono esserci degli scenari in cui non è davvero possibile... ma cercare di ottenere chiarimenti dall'OP sulla questione è ormai un'impresa disperata... e comunque, la domanda di fondo resta: se fosse possibile usare datetime, l'OP *saprebbe usare* datetime? E saremmo punto e a capo... Qui il problema è a monte.


@OP
> Ne sono venuta a capo.

Non ne sei venuta a capo.
 
Sei partita dall'idea di fare tre "for" innestati... cosa che poteva essere una soluzione adeguata, a patto di sapere come funziona "for"...
Adesso hai mescolato un ciclo "for" per ciclare sui mesi con un ciclo "while" interno per ciclare sui giorni... ma perché? Per ciclare in quel modo sui giorni, tanto valeva farlo con un "for".
E del resto il ciclo "for" sui mesi continua a essere sbagliato proprio come all'inizio... non stai ciclando su *tutti* i mesi tra l'inizio e la fine, ma solo su DUE mesi (quello iniziale e finale).
E come se non bastasse, siccome non resetti il contatore "i" alla fine del ciclo interno, tutta la baracca si ferma già alla fine del primo mese.
Abbi pazienza, eh... Ma hai PROVATO almeno una volta il codice che hai scritto? Il problema qui non è l'incremento dell'anno, come scrivi tu... il problema è che neanche l'incremento dei mesi funziona.

Direi che il problema fondamentale resta ancora che non hai compreso come funziona "for". E purtroppo guarda che non c'è una soluzione rapida per questo problema. Come ti dicevo all'inizio, purtroppo la programmazione in generale è fatta in questo modo un po' balordo... per cui prima di programmare in Python occorre studiare Python.
Ma non è un problema enorme, eh? Un buon libro (il Lutz è sempre la scelta più saggia), qualche mese di serio impegno, e poi vedrai che per queste cose vai come una scheggia.


Poi c'è da dire che il "for" non è l'unica soluzione possibile al problema. Per esempio, Nunzio ti ha fatto vedere come risolvere la cosa con un solo ciclo "while", incrementando a ogni passaggio il giorno di 1. Ovviamente lui usa datetime che tiene conto da solo anche dell'incremento dei mesi e degli anni, man mano che tu incrementi il giorno.
Ma in ogni caso tu puoi usare lo stesso principio, anche senza usare datetime.
In questo caso l'algoritmo funziona come il contachilometri della macchina. Incrementi le unità, poi quando la rotella dell'unità arriva a 9, la fai tornare a 0 e incrementi di 1 le decine, e così via.
Dovresti scrivere un algoritmo del genere:

data = data_inziale
while True:
    print(data)
    se la data supera la data_finale:
        esco dal ciclo
    incremento il giorno di 1
    se il giorno supera il 31:
        il giorno diventa 0
        incremento il mese di 1
    se il mese supera il 12:
        il mese diventa 1
        incremento l'anno di 1

Non so... puoi provare a implementare questa cosa, se ti viene più facile così rispetto alla strada col "for"... ma guarda che ho paura che i tuoi problemi di fondo non spariranno, se non ti fai prima le basi necessarie.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 352
  • Punti reputazione: 0
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #7 il: Ottobre 28, 2020, 15:54 »
@nunzio
> assurdo ci sia motivo di NON usare una libreria standard di python in uno script python

No, possono esserci degli scenari in cui non è davvero possibile...

@OP
> Ne sono venuta a capo.
Non ne sei venuta a capo...

Ah! ... beh, alla mia età la mente è "rigida" e manca di immaginazione, comunque mi ha intrigato pormi la domanda "al posto dello OP come risolverei?"
Facile, dato l'algoritmo indicato da @Ric, tutto sommato uno dei più logici, ho immaginato un "DateStepper" (non so se è "inglese" ma suona bene ;) ) e ci ho giochicchiato un pochino, non è un gran che (giusto un minimo) ma lo posto, sai mai possa servire
# -*- coding: utf-8 -*-

class DateStepper:
    def __init__(self, year, month, day, step=1):
        self._days = [31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        self.year = year
        self.month = month
        self.day = day
        self._evaluate_year()
        self.step = step
        if self.step >= 0:
            self.passo = 1
        else:
            self.passo = -1
        self.sep = '-'

    def _evaluate_year(self):
        if not self.year % 400:
            self._days[1] = 29
        elif not self.year % 4:
            self._days[1] = 29
        else:
            self._days[1] = 28

    def __iter__(self):
        return self

    def __next__(self):
        for i in range(abs(self.step)):
            self.day += self.passo
            if self.day > self._days[self.month - 1]:
                self.day = 1
                self.month += 1
                if self.month > 12:
                    self.month = 1
                    self.year += 1
                    self._evaluate_year()
            elif self.day < 1:
                self.month -= 1
                if self.month < 1:
                    self.month = 12
                    self.year -= 1
                    self.evaluate_year()
                self.day = self._days[self.month -1]
        return self

    def __eq__(self, o_obj):
        return ((self.year, self.month, self.day) == (o_obj.year, o_obj.month, o_obj.day))

    def __lt__(self, o_obj):
        return ((self.year, self.month, self.day) < (o_obj.year, o_obj.month, o_obj.day))
   
    def __repr__(self):
        return self.sep.join(('%04d' % self.year, '%02d' % self.month, '%02d' % self.day))


def get_urls(aqp, start_d, limit_d):
    urls = []
    while start_d < limit_d:
        url = 'url' + aqp + '/csv?start_date=' + str(start_d)
        next(start_d)
        url += '&end_date=' + str(start_d)
        urls.append(url)
    return urls


if __name__ == '__main__':
    numAQP = input("Inserisci il numero della AQP:")
    mese_iniziale = input("Inserisci il mese iniziale:")
    anno_iniziale = input("Inserisci anno iniziale:")
    start_date = DateStepper(int(anno_iniziale), int(mese_iniziale), 1)

    mese_finale = input("Inserisci il mese_finale:")
    anno_finale = input("Inserisci anno_finale:")
    limit_date = DateStepper(int(anno_finale), int(mese_finale)+1, 1, -1)
   

    my_urls = get_urls(numAQP, start_date, next(limit_date))

    for u in my_urls:
        print(u)

P.S. - mi son divertito a farlo andare avanti ed indietro "nel tempo", i bisestili li becca ma non vuole essere niente, è solo un giocattolo da usare se proprio "non si può" :)

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #8 il: Ottobre 28, 2020, 18:12 »
mi sembra un po' troppo cerimonioso come l'hai impostato, ma... sì l'idea è quella.
Se funziona senza intoppi (non ho testato), direi che l'OP ha la sua ricettina da copincollare, che le permetterà di andare avanti ancora un po' con il suo progetto, senza la noia di mettersi a studiare i "for" e i "while" e tutto il resto.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 352
  • Punti reputazione: 0
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #9 il: Ottobre 29, 2020, 10:59 »
mi sembra un po' troppo cerimonioso come l'hai impostato...

Mi incuriosisci, cosa intendi con "cerimonioso"?

Credo Tu intenda l'oggetto, mi son limitato a valutare cosa servisse trovarlo sulla docs ed implementarlo, certo ho separato un po' rispetto al "problema" di per se ... intendi implementazioni più "immediate"?

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.151
  • Punti reputazione: 9
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #10 il: Ottobre 29, 2020, 11:22 »
Cerimonioso nel senso che all'OP serve un algoritmo, non un oggetto... non ha bisogno di uno "stepper" da istanziare, eventualmente in più copie, eccetera eccetera.
Un semplice algoritmo "stateless" come quello che serve all'OP può essere rappresentato meglio in una funzione (meglio un generatore, come hai anche intuito tu).
Questo non vuol dire che non si debba fare attenzione ai dettagli dell'API... ma in complesso snellirei parecchio quel codice.

Offline Valentina9213

  • python unicellularis
  • *
  • Post: 11
  • Punti reputazione: 0
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #11 il: Novembre 13, 2020, 12:40 »
Dopo lo studio e corsi per la programmazione, questo è quello che è andato bene per il lavoro.
che ne pensate?
import requests
numAQP = input("Inserisci il numero della AQP:")
mese_iniziale = input("Inserisci il mese iniziale:")
anno_iniziale = input("Inserisci anno iniziale:")
mese_finale = input("Inserisci il mese_finale:")
anno_finale = input("Inserisci anno_finale:")

#converto in intero
mese_in = int(mese_iniziale)
mese_out = int(mese_finale)

anno_in = int(anno_iniziale)
anno_out = int(anno_finale)

if anno_in == anno_out:
    for i in range(mese_in, mese_out+1):
        start = str(anno_in) + '-' + str(i) + '-' + '01'
        end = str(anno_out) + '-' + str(i) + '-' + '31'
        print('start', start, 'end', end)
        url = ('url' + numAQP + '/csv?start_date=' + start + '&end_date=' + end)
        response = requests.get(url)
        url_content = response.content
        csv_file = open('new_out.csv', 'wb')
        csv_file.write(url_content)
        csv_file.close()
if anno_in < anno_out:
    for i in range(mese_in, 13):
        """
        L'anno iniziale è più piccolo di anno finale, quindi stampami tutti i mesi fino a 12
        """
        start = str(anno_in) + '-' + str(i) + '-' + '01'
        end = str(anno_in) + '-' + str(i) + '-' + '31'
        print('start', start, 'end', end)
        url = ('url' + numAQP + '/csv?start_date=' + start + '&end_date=' + end)
        response = requests.get(url)
        url_content = response.content
        csv_file = open('new_out.csv', 'wb')
        csv_file.write(url_content)
        csv_file.close()
        """
        Qui domando se sono arrivato al mese = 12
        """
        if i == 12:
            for y in range(1, mese_out+1):
                start = str(anno_out) + '-' + str(y) + '-' + '01'
                end = str(anno_out) + '-' + str(y) + '-' + '31'
                print('start', start, 'end', end)
                url = ('url' + numAQP + '/csv?start_date=' + start + '&end_date=' + end)
                response = requests.get(url)
                url_content = response.content
                csv_file = open('new_out.csv', 'wb')
                csv_file.write(url_content)
                csv_file.close()

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 352
  • Punti reputazione: 0
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #12 il: Novembre 13, 2020, 13:15 »
Dopo lo studio e corsi per la programmazione, questo è quello che è andato bene per il lavoro.
che ne pensate?

Mi dispiace dirlo, @Valentina, ma non credo che sia "andato bene", a parte il fattore "data" che mi lascia perplesso per i mesi che non hanno 31 giorni (il problema inizialmente posto), vi è questo blocco di istruzioni :
        csv_file = open('new_out.csv', 'wb')
        csv_file.write(url_content)
        csv_file.close()

poste all'interno dei cicli for che sovrascrivono i precedenti files di dati, o l'open dovrebbe essere posto in forma "append" ("ab") oppure dovrebbe essere modificato il nome del file ad ogni ciclo.

L'algoritmo posto, inoltre, presenta alcune pecche e non sarebbe in grado di gestire tre anni, al momento non posso dilungarmi oltre ma questa sera Te ne proporrò una variante.

Ciao
« Ultima modifica: Novembre 13, 2020, 13:17 da nuzzopippo »

Offline Valentina9213

  • python unicellularis
  • *
  • Post: 11
  • Punti reputazione: 0
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #13 il: Novembre 13, 2020, 14:47 »
a parte il fattore "data" che mi lascia perplesso per i mesi che non hanno 31 giorni
Si è vero, ho posto la stessa domanda anche io al mio tutor di lavoro, mi ha detto di ignorarlo per il momento.

poste all'interno dei cicli for che sovrascrivono i precedenti files di dati, o l'open dovrebbe essere posto in forma "append" ("ab") oppure dovrebbe essere modificato il nome del file ad ogni ciclo.
Non posso usare append perchè io ogni volta posso chiedere che il numero della piattaforma è diversa dal file che è stato generato.
Se scarico i dati della piattaforma 34 e al prossimo giro chiedo di scaricare la piattaforma 20, mi deve generare un'altro file contenente i dati solo della piattaforma 20 e non della 34 e la 20 insieme nello stesso unico file.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 352
  • Punti reputazione: 0
    • Mostra profilo
Re:PythonCode su datetime
« Risposta #14 il: Novembre 13, 2020, 20:40 »
Bah ... ben strano andamento, trovo, ma non sono certo il più adatto ad esprimere valutazioni.

Non posso usare append perchè io ogni volta posso chiedere che il numero della piattaforma è diversa dal file che è stato generato.
Se scarico i dati della piattaforma 34 e al prossimo giro chiedo di scaricare la piattaforma 20, mi deve generare un'altro file contenente i dati solo della piattaforma 20 e non della 34 e la 20 insieme nello stesso unico file.

E perdere dati puoi? guarda che arriva nel file con "wb" in una sessione così
======== RESTART: /home/nuzzopippo/test/pyt/posts/valentina/valentina_3.py ========
Inserisci il numero della AQP: 014
Inserisci il mese iniziale: 2
Inserisci anno iniziale: 2020
Inserisci il mese finale: 10
Inserisci anno finale: 2020
url014/csv?start_date=2020-02-01&end_date=2020-02-31
url014/csv?start_date=2020-03-01&end_date=2020-03-31
url014/csv?start_date=2020-04-01&end_date=2020-04-31
url014/csv?start_date=2020-05-01&end_date=2020-05-31
url014/csv?start_date=2020-06-01&end_date=2020-06-31
url014/csv?start_date=2020-07-01&end_date=2020-07-31
url014/csv?start_date=2020-08-01&end_date=2020-08-31
url014/csv?start_date=2020-09-01&end_date=2020-09-31
url014/csv?start_date=2020-10-01&end_date=2020-10-31

da shell leggo il file
NzP:~$ cat new_out.csv
url014/csv?start_date=2020-10-01&end_date=2020-10-31
NzP:~$ rm new_out.csv

ovviamente, ho solo scritto lo url nel file, non ho mica il Tuo responso, lanciando, invece, con "ab" si ottiene :
NzP:~$ cat new_out.csv
url014/csv?start_date=2020-02-01&end_date=2020-02-31
url014/csv?start_date=2020-03-01&end_date=2020-03-31
url014/csv?start_date=2020-04-01&end_date=2020-04-31
url014/csv?start_date=2020-05-01&end_date=2020-05-31
url014/csv?start_date=2020-06-01&end_date=2020-06-31
url014/csv?start_date=2020-07-01&end_date=2020-07-31
url014/csv?start_date=2020-08-01&end_date=2020-08-31
url014/csv?start_date=2020-09-01&end_date=2020-09-31
url014/csv?start_date=2020-10-01&end_date=2020-10-31
url014/csv?start_date=2020-11-01&end_date=2020-11-31
url014/csv?start_date=2020-12-01&end_date=2020-12-31
url014/csv?start_date=2021-01-01&end_date=2021-01-31
url014/csv?start_date=2021-02-01&end_date=2021-02-31
NzP:~$


per quanto riguarda il Tuo codice ... beh, devi ancora lavorarci un bel po' su, poi tieni presente che se devi differenziare per piattaforma, puoi tranquillamente chiedere l'inserimento della piattaforma e crearti un nome-file partendo dall'inserimento, prova questo codice, un semplice aggiustamento del Tuo, è in grado di "lavorarti" un intervallo di pochi mesi (anche uno) o di diversi anni, con termine nel mese voluto", sono commentate che cose che "non posso" effettuare, sono inserite delle istruzioni da cancellare per il Tuo uso, provalo e, se Ti va benne, studia un po' come è fatto

# -*- coding: utf-8 -*-

# import requestes


numAQP = input('Inserisci il numero della AQP: ')
piattaforma = input('Inserisci la piattaforma: ')
f_name = 'piatt_%s_new_out.csv' % piattaforma

try:
    mese_in = int(input('Inserisci il mese iniziale: '))
    anno_in = int(input('Inserisci anno iniziale: '))
    mese_out = int(input('Inserisci il mese finale: '))
    anno_out = int(input('Inserisci anno finale: '))
except ValueError:
    print('Numero non valido, esco')
    exit(1)

for a in range(anno_in, anno_out + 1):
    m_i = mese_in if a == anno_in else 1  # determina il mese iniziale
    t_m = mese_out + 1 if a == anno_out else 13 # terminatore del ciclo "mese"
    for m in range(m_i, t_m):
        url = 'url%s/csv?start_date=%d-%02d-01&end_date=%d-%02d-31' %(numAQP, a, m, a, m)
        print(url)  # giusto per visualizzare
        # response = requests.get(url)
        # url_content = response.content
        url_content = url + '\n'    # <-- cancella questa
        with open(f_name, 'ab') as csv_file:
            csv_file.write(url_content.encode(encoding='utf8'))  # <-- e questa
            # csv_file.write(url_content)
« Ultima modifica: Novembre 13, 2020, 20:42 da nuzzopippo »