• 0
Sign in to follow this  
GustavoDalPai

Corrigir Data .CSV

Question

Boa noite galera,

Tenho .csv com 3000 linhas falando sobre datas e horas de um veículo:
 

1  #Arrival_Date#     #Arrival_Time#     #Departure_Date#     #Departure_Time#
2   2017/01/01         23:30              2017/01/01           00:30 
3   2017/02/01         23:30              2017/02/01           23:40 
4   2017/03/01         15:45              2017/03/01           17:30 
5   2017/04/10         23:50              2017/04/10           00:30
6   2017/07/16         23:50              2017/07/17           00:30

Meu problema é que preciso corrigir as datas do #Departure_Date# toda vez que o dia vira. Linha 6, por exemplo, está correta. Linhas 2 e 5 não.

Num primeiro momento, utilizei o Excel para filtrar os #Arrival_Time# próximos de 00:00 e mudei das datas no braço. Foi um pouco trabalhoso, mas deu certo.

Conversando com um professor meu, o mesmo disse que talvez utilizando python eu poderia automatizar esse processo. Mas não faço de ideia de como fazer ou por onde começar.

Alguém poderia me dar uma luz?

 

Agradeço desde já.

 

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Supondo que o seu CSV é assim...

2017/01/01;23:30;2017/01/01;00:30 
2017/02/01;23:30;2017/02/01;23:40 
2017/03/01;15:45;2017/03/01;17:30 
2017/04/10;23:50;2017/04/10;00:30
2017/07/16;23:50;2017/07/17;00:30

... você poderia fazer isso:

import io
import datetime
import string

f = io.open("c:/pasta/teste.csv")

linhas = f.readlines()

f.close()

fout = io.open("c:/pasta/teste_out.csv", "w")

for l in linhas:
    dados = l.replace('\n', '').strip().split(";")
    dt1 = datetime.datetime.strptime("{0} {1}".format(dados[0], dados[1]), "%Y/%m/%d %H:%M")
    dt2 = datetime.datetime.strptime("{0} {1}".format(dados[2], dados[3]), "%Y/%m/%d %H:%M")

    if dt2<dt1:
        dt2 = dt2 + datetime.timedelta(days=1)
        dados[2] = dt2.strftime("%Y/%m/%d")

    print dt1
    print dt2

    fout.write(string.join(dados, ";") + "\n")

fout.flush()
fout.close()

 

 

Share this post


Link to post
Share on other sites
  • 0
14 horas atrás, Graymalkin disse:

"{0} {1}".format(dados[0]

O que seriam esse {0} e {1}?

Entendi o código em si. Realmente essa função datetime é bem útil para o que preciso.

Mas esse .format me pegou. Procurei em outros lugares mas não achei nada esclarecedor.

Share this post


Link to post
Share on other sites
  • 0

O format() apenas coloca os argumentos passados dentro da string, ou seja, {0} vai se tornar o conteúdo de dados[0], e {1} vai se tornar o conteúdo de dados[1] (na primeira linha em que é usado). Daria o mesmo se fizéssemos:

dt1 = datetime.datetime.strptime(dados[0] + " " + dados[1], "%Y/%m/%d %H:%M")

Apenas o format é uma maneira mais limpa de se formatar strings.

Abraços!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this