Ir para conteúdo
Fórum Script Brasil
  • 0

Corrigir Data .CSV


GustavoDalPai

Pergunta

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á.

 

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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()

 

 

Link para o comentário
Compartilhar em outros 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!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...