ValueError: данные времени «Нет» не соответствуют формату «% Y-% m-% d% H:% M:% S» - PullRequest
0 голосов
/ 15 февраля 2019
['BBBBB', '20190213', 'SUCCESS', 'Job_name1', '2019-02-14 18:11:55', '2019-02-14 18:11:56', '0.02']    
['AAAAA', '20190213', 'SUCCESS', 'job_name2', '2019-02-14 18:11:48', '2019-02-14 18:11:50', '0.03']
['AAAA', '20190213', 'WAITING', 'job_name4', 'None', 'None', '0'] 

У меня есть список результатов БД, как указано выше, записи 4,5 находятся в часовом поясе UTC и являются строками

def save_jobs_to_file(jobs_info, filename):
        '''save jobs to file
        saved to file in re-arranged order: 1 - 0 - 3 - 3 - 4 - 5 - calculated run time
        '''
        from datetime import datetime
        import pytz
        tz = pytz.timezone('America/Los_Angeles')
        utc = pytz.utc
        logging.warning('Saving jobs to file {0}...'.format(filename))
        f = open(filename, "w+")
        for line in jobs_info:
            #print(line)
            for i in range(len(line)):
                if line[i] == None:
                    pass
                else:
                    #print(datetime.strptime(line[4],'%Y-%m-%d %H:%M:%S'))
                    print(type(line[4]),type(line[5]))
                    line[4] = datetime.strptime(line[4],'%Y-%m-%d %H:%M:%S')
                    line[4] = utc.localize(line[4])
                    line[4] = line[4].strftime('%Y-%m-%d %H:%M:%S')
                    line[5] = datetime.strptime(line[5],'%Y-%m-%d %H:%M:%S')
                    line[5] = utc.localize(line[5])
                    line[5] = line[5].strftime('%Y-%m-%d %H:%M:%S')
            line = "|".join(line)
            f.write(line)
            f.write('\n')
        logging.warning('Completed saving jobs to file {0}!'.format(filename))

Я пытаюсь изменить 4,5 записи для объектов даты и времени, используяФункция strptime и снова преобразование их в объект времени данных часового пояса pst и преобразование их строки снова с использованием strftime ().

Кроме того, мой список содержит None-значения в 4,5 записях, хотя я проверяю None-значения, но strptime выдает ошибку ниже.

(<type 'str'>, <type 'str'>)
Traceback (most recent call last):
  File "./heart_latest_dev_get_pc_jobs.py", line 239, in <module>
    main_program()
  File "./heart_latest_dev_get_pc_jobs.py", line 222, in main_program
    save_jobs_to_file(enhanced_jobs,filename)
  File "./heart_latest_dev_get_pc_jobs.py", line 104, in save_jobs_to_file
    line[4] = datetime.strptime(line[4],'%Y-%m-%d %H:%M:%S')
  File "/usr/lib64/python2.7/_strptime.py", line 332, in _strptime
    (data_string, format))
ValueError: time data 'None' does not match format '%Y-%m-%d %H:%M:%S'

Я новичок в Python,Я рад, что сделал это частью работы, но я не могу понять, что я делаю неправильно, хотя я передаю строку в strptime и проверяю None Values.

В соответствии с рекомендациями @John Anderson

Надеюсь, я правильно выполнил то, что он предложил, но все еще получаю ту же ошибку:

Edit(1):

def save_jobs_to_file(jobs_info, filename):
    '''save jobs to file
    saved to file in re-arranged order: 1 - 0 - 3 - 3 - 4 - 5 - calculated run time
    '''
    from datetime import datetime
    import pytz
    tz = pytz.timezone('America/Los_Angeles')
    utc = pytz.utc
    logging.warning('Saving jobs to file {0}...'.format(filename))
    f = open(filename, "w+")
    for line in jobs_info:
        #if line[0] != None:
        for i in range(len(line)):
            if  line[0] != None:
                #print(datetime.strptime(line[4],'%Y-%m-%d %H:%M:%S'))
                #print(line[0])
                #print(type(line[4]),type(line[5]))
                line[4] = datetime.strptime(line[4],'%Y-%m-%d %H:%M:%S')
                line[4] = utc.localize(line[4])
                line[4] = line[4].strftime('%Y-%m-%d %H:%M:%S')
                line[5] = datetime.strptime(line[5],'%Y-%m-%d %H:%M:%S')
                line[5] = utc.localize(line[5])
                line[5] = line[5].strftime('%Y-%m-%d %H:%M:%S')
        line = "|".join(line)
        f.write(line)
        f.write('\n')
    logging.warning('Completed saving jobs to file {0}!'.format(filename))

Ошибка после редактирования (1):

   Traceback (most recent call last):
      File "./heart_latest_dev_get_pc_jobs.py", line 240, in <module>
        main_program()
      File "./heart_latest_dev_get_pc_jobs.py", line 223, in main_program
        save_jobs_to_file(enhanced_jobs,filename)
      File "./heart_latest_dev_get_pc_jobs.py", line 103, in save_jobs_to_file
        line[4] = datetime.strptime(line[4],'%Y-%m-%d %H:%M:%S')
      File "/usr/lib64/python2.7/_strptime.py", line 332, in _strptime
        (data_string, format))
    ValueError: time data 'None' does not match format '%Y-%m-%d %H:%M:%S'



 *****Any help would be much appriciated :)*****

1 Ответ

0 голосов
/ 15 февраля 2019
   import pytz
   for line in jobs_info:
        #print(line)
        for i in range(len(line)):
            if line[i] == None:
                pass
            else:
                #print(datetime.strptime(line[4],'%Y-%m-%d %H:%M:%S'))
                print(type(line[4]),type(line[5]))
                try:
                    line[4] = datetime.strptime(line[4],'%Y-%m-%d %H:%M:%S')
                    line[4] = pytz.utc.localize(line[4])
                    line[4] = line[4].strftime('%Y-%m-%d %H:%M:%S')
                    line[5] = datetime.strptime(line[5],'%Y-%m-%d %H:%M:%S')
                    line[5] = pytz.utc.localize(line[5])
                    line[5] = line[5].strftime('%Y-%m-%d %H:%M:%S')
                except:
                    pass
        line = "|".join(line)
        print (line)

Результат:

BBBBB | 20190213 | SUCCESS | Job_name1 | 2019-02-14 18: 11: 55 | 2019-02-14 18: 11: 56 | 0,02 AAAAA | 20190213 | SUCCESS| job_name2 | 2019-02-14 18: 11: 48 | 2019-02-14 18: 11: 50 | 0,03 AAAA | 20190213 | WAITING | job_name4 | Нет | Нет | 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...