gpt4 book ai didi

python - 如何读取大于 60 的分钟值并避免 ValueError : time data '60:01' does not match format '%M:%S'

转载 作者:太空宇宙 更新时间:2023-11-03 20:32:01 25 4
gpt4 key购买 nike

我有一个脚本,可以读取损坏的 .CUE 文件,该文件没有 INDEX 00,并检索每个轨道条目的分钟和秒值。找到这些值后,脚本会减去每个轨道的 02 秒(从而创建预间隙并更正 .CUE 文件)并创建新的正确 .CUE 文件。该脚本运行得非常顺利,直到遇到包含大于 60 的分钟值的 .CUE 文件。出现以下错误:

ValueError: time data '60:01' does not match format '%M:%S'

我使用日期时间是因为我不能简单地减去每个轨道条目的 02 秒作为整数。当条目的“INDEX 01”秒值为 01 秒时,减去 02 秒也会影响分钟值,因为这意味着分钟值将减少 01。

这是执行格式化和减法的代码的一部分。在遇到大于 60 的分钟值之前,此方法工作正常:

from datetime import datetime

WrongIndex = '60:01'
NewIndex = '00:02'
format = '%M:%S'
time = datetime.strptime(WrongIndex, format) - datetime.strptime(NewIndex, format)

本例中的预期返回值应为“59:59”。

我想知道是否有其他方法可以使用大于 60 的分钟值,因为这些文件的最大长度可达 79.8 分钟。

最佳答案

我认为 datetime 对象并不是真正适合您的问题的数据结构。该类型期望引用真实的时钟时间,而不仅仅是任意数量的分钟和秒。如果您坚持使用datetime,更合适的类型可能是timedelta,它表示一段时间,不受任何特定时钟或日历的影响。但是 timedeltas 没有与 strptime 等效的东西。

如果不进行解析,您根本无法从 datetime 中获得太多信息。所以我建议你自己进行解析。这不是很困难:

minutes, seconds = map(int, WrongIndex.split(':'))

这只是将您的输入字符串(例如 '60:01')拆分为具有两个值的列表(['60', '01'])。然后它将字符串值转换为整数。然后它将两个整数分配给变量分钟

为了使数学计算变得容易,您可以将两个值组合成一个整数,即秒数:

seconds += minutes * 60

然后您可以减去两秒偏移并将秒数转换回时间字符串:

seconds -= 2    # or parse the offset string if you don't want to hard code two seconds

result = "{:02}:{:02}".format(*divmod(seconds, 60))

在格式化步骤中,我使用 divmod 函数,该函数一步计算地板除法和模数(它以元组形式返回两者)。

关于python - 如何读取大于 60 的分钟值并避免 ValueError : time data '60:01' does not match format '%M:%S' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57439510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com