2017-08-16 1 views
0

J'ouvre un fichier sur une machine distante en utilisant sftp et ça marche bien, mais je a obtenu cette erreurValueError: les données de temps ne correspondent pas au format '% Y-% m-% d% H:% M:% S' sur le fichier machine distant

ValueError: time data '"2015-06-25 14:50:00"' does not match format 
'%Y-%m-%d %H:%M:%S' 

mais le format que j'utilise est correct. Voici mon code pour la partie respective du code.

#!/usr/bin/env python 
# -*-coding:utf-8 -* 
import os 
import sys 
import time 
import stat 
import pysftp as sftp 
import subprocess 
import paramiko 
import datetime 
from datetime import datetime, timedelta 
from time import mktime, strftime, localtime, sleep 



u_name = 'robi' 
pswd = 'xxxx' 
port = 22 
r_ip = 'xxx.xxx.x.xxx' 
sec_key = '/home/rob/key_detail' 

myconn = paramiko.SSHClient() 
myconn.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
my_rsa_key = paramiko.RSAKey.from_private_key_file(sec_key) 
session = myconn.connect(r_ip, username=u_name, password=pswd, port=port, 
         pkey=my_rsa_key) 
# print myconn.get_transport().is_active() 
# path1 = "/home/rob_remote/sensors/12/tem_data/temp.dat" 
fmt = '%Y-%m-%d %H:%M:%S' 
path1 = "/home/rob_remote/sensors/12/tem_data/temp.dat" 
path2 = '/home/new/loc/13/press/pressure.dat' 
start_time = datetime.strptime("2015-06-25 14:50:00", fmt) 
latest_time = datetime.now() 
step_size = 10 
diff = latest_time - start_time 
minutes_values = diff.total_seconds()/60 
expected = int(minutes_values/step_size) 
sftp = myconn.open_sftp() 
with sftp.open(path1) as f: 
    read = f.readlines()[4:] 
    get_values = [] 
    for line in read: 
     line = line.strip().split(',') 
     start_date = line[0] 
     start_date = datetime.strptime(start_date, fmt) 
     current_time = datetime.now() 
     step_size = 5 
     differ_time = current_time - start_date 
     minutes_values = differ_time.total_seconds()/60 
     get_values.append(int(minutes_values/step_size)) 
    # print 'get_values:::::::::::::::::::', max(get_values) 
get_val = max(get_values) 
. 
. 
. 
. 

Quelqu'un peut-il m'aider ou me guider pour faire face à ce problème. Je serais reconnaissant.

+2

Vous avez des guillemets doubles autour de la chaîne datetime de sorte que vous devez enlever ces ou de les ajouter à la chaîne de format ' ' "% Y-% m-% d% H:% M:% S" '' – EdChum

+0

@EdChum Pouvez-vous donner un petit exemple comment ajouter" "à la chaîne de format. J'essaie 2 solutions mais elles ne fonctionnent pas. – robbin

+0

@EdChum j'ai essayé cette solution data_tmp = [v.replace ("\" "," ") pour v dans start_date], mais résultat dans TypeError: doit être chaîne, pas la liste – robbin

Répondre

1

Il ressemble à vos chaînes de date sont enfermées dans des guillemets doubles, vous pouvez inclure les guillemets dans la chaîne de format, ou plus simple serait de dépouiller ces premiers:

In[15]: 
d = '"2015-06-25 14:50:00"'.replace('"','') 
datetime.strptime(d, fmt) 

Out[15]: datetime.datetime(2015, 6, 25, 14, 50) 

strip également travailler ici :

d.strip('\"') 

donc dans votre code ajouter cette

start_date = line[0].replace('"','') 

ou

start_date = line[0].strip('\"') 
+0

merci beaucoup ça fonctionne parfaitement bien maintenant – robbin