Как отформатировать «дд / мм / гггг» строкового типа в «гггг-мм-дд», заключенный в одинарные кавычки в python?

#python #pandas

#питон #панды

Вопрос:

Постановка задачи: назначьте дату (где есть максимальная разница давлений) в строковом формате как «гггг-мм-дд». Убедитесь, что вы заключили его в одинарные кавычки.

test.py файл снабжен вопросом для проверки моей записной книжки. Он доступен только для чтения, и мне не разрешено его редактировать.

test.py

 import re
from hashlib import md5
import nbformat
import pickle

def read_ipynb_file(file_path):
    with open(file_path) as file:
        out = str(nbformat.read(file_path, as_version=4))
    return out

path = 'question/EDA_question.ipynb'

out = read_ipynb_file(path)


max_p_range_day =  re.findall(r'max_p_range_days*=s*'d*[-,]?d*[-,]?d*'', out)[0].replace(' ', '').replace(' ', '').replace("'", "") 
 

Ошибка:

 ___________________________ ERROR collecting test.py ___________________________

test.py:23: in <module>

    max_p_range_day =  re.findall(r'max_p_range_days*=s*'d*[-,]?d*[-,]?d*'', out)[0].replace(' ', '').replace("'", "")

E   IndexError: list index out of range
 

В столбце dataset «День» указаны даты, которые представляют собой строки типа, подобные этому: «23/03/2018».

Мой код:

 ....
df5=pd.to_datetime(df5['Day']).dt.date  # date which has maximum pressure diff   

from datetime import datetime
max_p_range_day = datetime.strftime(df5.values[0],"'%Y-%m-%d'")
 

Это выводит дату в одинарных кавычках, но показывает ошибку, когда test.py оценивает его.

Для проверки себя я попробовал это:

  1. написал max_p_range_day в файле —

Содержимое файла:

 max_p_range_day = '2018-03-23'
 
  1. Затем сделал это:

    x= открыть («handson_date.txt «,»r»)

    out=x.read()

    res=re.findall(r’max_p_range_day s *= s * ‘ d *[-,]?d *[-,]?d *», out)[0].заменить (‘ ‘, «).заменить («‘», «»)

Ошибки не было никакой. res показал ‘max_p_range_day=2018-03-23’.

Но когда мой код тестируется с помощью test.py выдается сообщение об ошибке.

Пожалуйста, подскажите, как решить эту проблему.

Комментарии:

1. В test.py , каков вывод «out»? Вы его распечатали?

2. вероятно re.findall , ничего не возвращает. если вы индексируете пустой список, например: l=[] и l[0] вы получаете ту же ошибку

Ответ №1:

Этот вопрос требует, чтобы каждая переменная была распечатана в ячейке. Например, после получения значения max_p_range_day , распечатайте его как print("max_p_range_day = '2018-03-23'") , а затем запустите ячейку, чтобы распечатать выходные данные. Выполнив это для каждой переменной, запустите только test.py .

Этот вопрос проверяет не значение в переменной, а то, что напечатано в каждой ячейке. Для этого и предназначено это регулярное выражение.

 res=re.findall(r'max_p_range_days*=s*'d*[-,]?d*[-,]?d*'', out)[0].replace(' ', '').replace("'", "")
 

Надеюсь, вы найдете это полезным.

Ответ №2:

Измените свой код следующим образом

 re.findall(r"max_p_range_days*=s*'d*[-]d*[-]d*'",out)[0].replace(' ', '').replace("'", "")
 

Это будет работать с вами