Brad Rydalch
Brad Rydalch

Reputation: 71

Convert integer to hours and minutes

I'm working on a Python script that will read a file and grab a string total_time. Currently, this is what I have.

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

Output: 419

I'm trying to find the best way to read lots of files, grab this total time, and convert 419 into 4 hours and 19 minutes to allow me to do some statics and analytics with this.

Upvotes: 5

Views: 31485

Answers (3)

Mad Physicist
Mad Physicist

Reputation: 114460

Given some string set as

s = '419'

you can get the upper and lower digits by converting to an integer, then using modulo and integer division. The integer conversion can be encapsulated in a try-except block catching ValueError if you have a reasonable response to invalid inputs:

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

Upvotes: 2

orwinmc
orwinmc

Reputation: 178

The built-in function divmod() seems appropriate here!

>>> a = 5
>>> b = 3
>>> divmod(a,b) # (a // b, a % b)
(1,2) 

For your specific situation:

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]

If you would like to parse the data as you are inputting it try the re module which has the method re.sub() for regex substitution

>>> 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)

Upvotes: 1

Gary Mendonca
Gary Mendonca

Reputation: 2173

Passing format argument to datetime in Pandas:

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

Upvotes: 4

Related Questions