mes données est formatée en tant que tel:Sélection de données CSV à l'aide de Workday Python
Username, Timestamp, Text
Joe Bloggs, Thu Oct 5 09:00:00 +0000 2017, Starting work
Jane Doe, Fri Oct 7 18:00:00 +0000 2017, Finished work
Tom Smith, Sat Oct 8 04:00:00 +0000 2017, Still coding this thing
J'ai un fichier CSV de lignes 5M comme celui-ci, et je voudrais extraire seulement ceux dans les 9 heures-17 heures du lundi au vendredi . J'ai lu beaucoup de publications sur les données factices et l'extraction ligne par ligne, mais j'aimerais vraiment filtrer l'ensemble de données dans son ensemble et les exemples sont incomplets ou confus pour les non-experts.
EDIT:
Merci à @ivan7707 pour la réponse. Voici mon code complété, je n'ai rien inclus au début car je savais que mon code était complètement faux. (J'avais des problèmes avec% z donc eu recours au fractionnement.)
import csv
from datetime import datetime
main_file = csv.DictReader(open("source.csv","rb"))
for row in main_file: #points to csv
username = row['Username']
text = row['Text']
timestamp = row['Timestamp']
#Convert timestamp to useable format
timestamp = timestamp.split()
timestamp = (timestamp[2] + "-" + timestamp[1] + "-" + timestamp[5] + " " + timestamp[3])
dt = datetime.strptime(timestamp, "%d-%b-%Y %H:%M:%S")
if dt.isoweekday() in range(1, 6): #If day is Mon-Fri
if dt.hour in range(9, 17): #If hour is 9am-5pm
output_file.writerow([username,text,timestamp]) #Save
EDIT 2:
Après la conversation ivan7707 et j'ai eu dans les commentaires, voici le code qui ajoute un numéro de la semaine aux données:
import csv
from datetime import datetime
main_file = csv.DictReader(open("source.csv","rb"))
for row in main_file:
username = row['Username']
text = row['Text']
timestamp = row['Timestamp']
#Convert timestamp to usable format as it was erroring with %z (+0000 part)
timestamp = timestamp.split()
timestamp = (timestamp[2] + "-" + timestamp[1] + "-" + timestamp[5] + " " + timestamp[3])
dt = datetime.strptime(timestamp, "%d-%b-%Y %H:%M:%S")
#Check if timestamp is within Mon-Fri 9am-5pm
if dt.isoweekday() in range(1, 6): #Mon-Fri
if dt.hour in range(9, 17): #9am-5pm
weekday_list.append(week)
output_file.writerow([username,text,timestamp,week]) #Writes to csv
#Handy bit to iterate one week per 5 business days
elif dt.isoweekday() == 7:
if len(weekday_list) > 1:
weekday_list = []
week += 1
sortie pour le script hebdomadaire
Username, Timestamp, Text, Week,
Joe Bloggs, 06-10-2017 16:59:59, Hello World!, 1
Jane Doe, 09-10-2017 09:00:01, Hello!, 2
Ça sonne bien. Pourquoi ne pas essayer, alors revenez à utiliser avec un problème spécifique que vous rencontrez avec votre tentative, et nous serons heureux de vous aider. –
Merci pour la réponse. J'ai résolu le problème grâce à ivan7707 ci-dessous, mais si vous savez comment enregistrer un csv après chaque semaine et chaque mois ce serait vraiment utile. –