将整数转换为小时和分钟

5

我正在编写一个Python脚本,它将读取一个文件并获取一个字符串total_time。目前,这是我的代码:

if("Total time" in data):
                total_time=int(filter(str.isdigit, data))
                print(total_time)

输出:419

我正在尝试找到最佳的方法来读取大量文件,获取总时间,并将 419 转换为 4 小时 19 分钟,以便我可以对此进行一些统计和分析。


尝试将4小时19分钟转换为Python datetime对象。另外,您要读取的文件类型是什么?最好将txt转换为csv,这样您可以利用pandas和数据框的强大功能。 - skybunk
比什么更好?你实际上没有展示解决问题的方法... - Mad Physicist
“data”长什么样?由于“data”是一个字符串,因此您应该使用正则表达式单独提取小时和分钟,而不是将它们连接成没有实际意义的整数。 - blhsing
该文件是一个org文件,我已经讨论过如何抓取数据并读取总时间。以下是文件中字符串的样式:| 总时间 | 4:19 | |
|--------------+--------+------|
- Brad Rydalch
3个回答

4

format参数传递给Pandas中的datetime:

t="419"
a = pd.to_datetime(t, format='%H%M')
print(a.hour)
print(a.minute)

这个代码可以运行,但输出结果包含年、月和日。有没有办法只打印小时和分钟? - Brad Rydalch
print(a.hour)和print(a.minute)会打印出小时和分钟。您需要从时间戳中提取小时和分钟。 - Gary Mendonca
如果你想要它的格式为小时:分钟,你可以将输出连接起来,如a.hour+":"+a.minute。 - Gary Mendonca

2
给定一些字符串集合,设置为:
s = '419'

您可以将文本转换为整数,然后使用取模和整数除法来获取上下位数字。整数转换可以封装在一个try-except块中,如果您对无效输入有合理的响应,则可以捕获ValueError

n = int(s)
hours = n // 100  # Truncating integer division
minutes = n % 100  # Modulo removes the upper digits

1
内置函数 divmod() 在这里看来是合适的!
>>> a = 5
>>> b = 3
>>> divmod(a,b) # (a // b, a % b)
(1,2) 

针对您的特定情况:
def dataToTime(data):
    ''' Returns a list of (hour, minute) tuples from
        a list of strings '''
    total_times = filter(str.isdigit,data)
    return [divmod(int(time),100) for time in total_times]

如果您想在输入数据时解析数据,请尝试使用re模块,该模块具有用于正则表达式替换的re.sub()方法。
>>> import re

>>> s = '| Total time | 4:19 | | |--------------+--------+------| –'
>>> h = int(re.sub(r':.*$|[^0-9]','',s))
>>> m = int(re.sub(r'^.*:|[^0-9]','',s))
>>> print h,m
(4,19)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接