ValueError:时间数据“无”与格式“%Y-%m-%dT%H:%M:%S.%f”不匹配

时间:2020-09-03 03:15:45

标签: python python-3.x xml-parsing

对于节点“ TransactionDate”,在为策略“ POL000002NGJ”更新它之前,我有一个逻辑。 我尝试实现的逻辑是,如果现有的'TransactionDate'<今天不存在,则添加5天的当前值并将其解析为xml。

XML中的交易日期格式:2020-03-23T10:56:15.00

请注意,如果我像下面那样解析DateTime值,则效果很好,但是我不想对值进行硬编码...我想将其解析为字符串对象以处理任何日期时间,格式为“”%Y -%m-%dT%H:%M:%S.%f“”“ ...

# <TransactionDate> 
today = datetime.now()
TransactionDate = doc.find('TransactionDate')
Date = '2020-03-24T10:56:15.00' 
previous_update = datetime.strptime(Date, "%Y-%m-%dT%H:%M:%S.%f")

if previous_update < today:
     today = previous_update - timedelta(days=-5)
     TransactionDate = today.strftime("%Y-%m-%dT%H:%M:%S.%f")

下面的代码在将其解析为DateTime对象时,我遇到了一个问题..我被打到这里,并在stackoverflow和python论坛中引用了其他答案,但是仍然在这里有结构,无法解决问题... < / p>

如果有任何帮助修复将非常有帮助。谢谢。下面的代码使用lxml并获得支持以支持下面的代码将很有帮助。因为我已经为其他节点完成了。我的理解是Date变量的调用方式为None。

# <TransactionDate> 
today = datetime.now()
TransactionDate = doc.find('TransactionDate')
Date = str(TransactionDate)
previous_update = datetime.strptime(Date, "%Y-%m-%dT%H:%M:%S.%f")

if previous_update < today:
     today = previous_update - timedelta(days=-5)
     TransactionDate = today.strftime("%Y-%m-%dT%H:%M:%S.%f")

完整代码在下面

from lxml import etree
from datetime import datetime, timedelta
import random, string


doc = etree.parse(r'C:\Users\python.xml') 

# <PolicyId> - Random generated policy number
Policy_Random_Choice = 'POL' + ''.join(random.choices(string.digits, k=6)) + 'NGJ'

# <TransactionDate> 
today = datetime.now()
TransactionDate = doc.find('TransactionDate')
Date = str(TransactionDate)  
previous_update = datetime.strptime(Date, "%Y-%m-%dT%H:%M:%S.%f")

if previous_update < today:
     today = previous_update - timedelta(days=-5)
     TransactionDate = today.strftime("%Y-%m-%dT%H:%M:%S.%f")
                                  
#Parsing the Variables
replacements = [Policy_Random_Choice  , TransactionDate ]

targets = doc.xpath('//ROW[PolicyId="POL000002NGJ"]')
for target in targets:
    target.xpath('./PolicyId')[0].text = replacements[0]
    target.xpath('.//TransactionDate')[0].text = replacements[1]
 
print(etree.tostring(doc).decode())

示例XML

<TABLE>
   <ROW>
      <PolicyId>POL000002NGJ</PolicyId>
      <BusinessCoverageCode>COV00002D3X1</BusinessCoverageCode>
      <TransactionDate>2020-03-23T10:56:15.00</TransactionDate>
   </ROW>
   <ROW>
      <PolicyId>POL111111NGJ</PolicyId>
      <BusinessCoverageCode>COV00002D3X4</BusinessCoverageCode>
      <TransactionDate>2020-03-23T10:56:15.00</TransactionDate>
   </ROW>
</TABLE>

1 个答案:

答案 0 :(得分:0)

也许find方法是错误的。试试这个

VOLK_IMPLEMENTATION