2016-07-14 4 views
0

Ich habe eine Liste von Daten und Geschäftsjahren in Python. Ich bin mit dem folgenden Code sie aus einer CSV ziehen in und laden in eine Liste:Python: Iterieren der Datumsliste und Auswählen des ersten Tages der Steuerwoche

import csv 

with open('Fiscal3.csv', 'rb') as csvfile: 
    reader = csv.reader(csvfile) 
    reader2 = list(reader) 

Hier ist, was die Liste wie folgt aussieht:

for a, b in reader2: 
print a,b 

Ergebnis:

1/13/2020 50 
1/14/2020 50 
1/15/2020 50 
1/16/2020 50 
1/17/2020 50 
1/18/2020 50 
1/19/2020 50 
1/20/2020 51 
1/21/2020 51 
1/22/2020 51 
1/23/2020 51 
1/24/2020 51 
1/25/2020 51 
1/26/2020 51 

Welchen Code kann ich verwenden, um den ersten Tag der Woche zu erhalten und ihn dann für jeden Tag in der Woche zu drucken, wie die folgende Ausgabe unten?

Output Ich suche zu erhalten:

[each day] [first day of week] 

1/13/2020 50 1/13/2020 
1/14/2020 50 1/13/2020 
1/15/2020 50 1/13/2020 
1/16/2020 50 1/13/2020 
1/17/2020 50 1/13/2020 
1/18/2020 50 1/13/2020 
1/19/2020 50 1/13/2020 
1/20/2020 51 1/20/2020 
1/21/2020 51 1/20/2020 
1/22/2020 51 1/20/2020 
1/23/2020 51 1/20/2020 
1/24/2020 51 1/20/2020 
1/25/2020 51 1/20/2020 
1/26/2020 51 1/20/2020 
+1

Könnten Sie den Code hinzufügen, die Sie bisher geschrieben haben? – sawreals

+0

Und fügen Sie Python-Code mit einem Beispiel Ihres Datenrahmens ein, den wir selbst ausführen können. Ihr Beispiel und die Formatierung sind sehr unklar. – Chris

+0

Enthalten eine bessere Beschreibung des Problems - suchen, einfach den ersten Tag der Woche zu jeder Zeile hinzufügen. –

Antwort

0
from datetime import datetime, timedelta 


res=[] 
dates=[('1/13/2020', 50),('1/13/2020', 49),('1/13/2020', 52)] 
for a, b in dates : 
    dt = datetime.strptime(a, '%m/%d/%Y') 
    start = dt - timedelta(days=dt.weekday()) 
    end = start + timedelta(days=6) 
    res.append((a,b, str(start)[:10])) 


print res 

Eingang nehmen:

dates=[('1/13/2020', 50),('1/13/2020', 49),('1/13/2020', 52)]

Ausgang:

[('1/13/2020', 50, '2020-01-13'), ('1/13/2020', 49, '2020-01-13'), ('1/13/2020', 52, '2020-01-13')] 
+0

Das hat funktioniert, danke! –

0

nicht sicher, ob das die beste Lösung ist können Sie aber erhalten. Hier gehe ich davon aus, dass Ihre erste Linie immer Geschäfts ersten Tag

 

import csv 
from datetime import datetime, timedelta, MINYEAR

with open ('Fiscal3.csv','rb') as csvfile: r = csv.reader(csvfile) first_day = datetime(1, 1,MINYEAR) for i in r: date_value = [ int(x) for x in i[0].split(' ')[0].split('/') ] value_as_datetime = datetime(date_value[2], date_value[0], date_value[1])

# if the difference is greater than a week, we want to update our first_day value if value_as_datetime - first_day >= timedelta(weeks=1): first_day = value_as_datetime print value_as_datetime, first_day

Ergebnisse

sein:

2020-01-13 00:00:00 2020-01-13 00:00 : 00
2020-01-14 00:00:00 2020-01-13 00:00:00
2020-01-15 00:00:00 2020-01-13 00:00:00
2020- 01-16 00:00:00 2020-01-13 00:00:00
2020-01-17 00:00:00 2020-01-13 00:00:00
2020-01-18 00:00:00 2020-01-13 00:00:00
2020-01-19 00:00:00 2020-01-13 00:00:00
2020-01-20 00:00:00 2020-01-20 00:00:00
2020-01-21 00:00:00 2020-01-20 00:00:00
2020-01-22 00:00:00 2020 -01-20 00:00:00
2020-01-23 00:00:00 2020-01-20 00:00:00
2020-01-24 00:00:00 2020-01-20 00: 00:00
2020-01-25 00:00:00 2020-01-20 00:00:00
2020-01-26 00:00:00 2020-01-20 00:00:00

Sie sollten auch einen Blick auf https://docs.python.org/2/library/datetime.html

Verwandte Themen