繁体   English   中英

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

[英]ValueError: time data 'None' does not match format '%Y-%m-%dT%H:%M:%S.%f'

对于节点“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 对象时,我遇到了一个问题。

如果任何帮助修复将是一个很大的帮助。 谢谢。 下面使用 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>

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

# <TransactionDate> 
today = datetime.now()
TransactionDate = doc.xpath('//ROW/TransactionDate') # Change find to xpath
Date = str(TransactionDate[0].text) # Use the first one
previous_update = datetime.strptime(Date, "%Y-%m-%dT%H:%M:%S.%f")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM