Что бы я сделал, это использовал бы некоторое регулярное выражение, чтобы собрать все ваши данные, и некоторые ifs здесь и там, чтобы проверить это + вашу интерпретацию этой Exp_date (в которой я не совсем уверен ..., это может быть простоупражнение, которое требует от вас извлечения данных в определенном формате)
import re
def split_exp_date( date):
if len(date) > 4:
return None
month = int( date[:2])
year = int( '20' + date[2:])
if not 0 < month < 13:
return None
return month, year
test = """
Year Month State Contract Exp Date
2010 1 OH S 2017
2010 2 OH C 1119
2010 1 AK S 1234
2010 2 AK S 1616
"""
r = re.compile( r'\n(?P<Year>[\d]+) +(?P<Month>[\d]{1,2}) +(?P<State>[\w]+) +(?P<Contract>[\w]+) +(?P<Exp_Date>[\d]+)')
res = r.finditer( test)
for e in res:
print( e.groupdict())
split_exp_date( e['Exp_Date'])
Year = e['Year']
Month = e['Month']
State = e['State']
Contract = e['Contract']
Exp_Date = split_exp_date( e['Exp_Date'])
print( Exp_Date)
#{'Year': '2010', 'Month': '1', 'State': 'OH', 'Contract': 'S', 'Exp_Date': '2017'}
#None
#{'Year': '2010', 'Month': '2', 'State': 'OH', 'Contract': 'C', 'Exp_Date': '1119'}
#(11, 2019)
#{'Year': '2010', 'Month': '1', 'State': 'AK', 'Contract': 'S', 'Exp_Date': '1234'}
#(12, 2034)
#{'Year': '2010', 'Month': '2', 'State': 'AK', 'Contract': 'S', 'Exp_Date': '1616'}
#None
Это должно дать вам ваши данные в гораздо более доступной форме, которую вы можете использовать / форматировать, как вы хотите