kpratihast
kpratihast

Reputation: 872

How to change date format in delimited file using python?

I have a pipe delimited text file with records like:

ABC|1234|10/26/2016|PQRS|02/27/2016|

GHI|4321|02/27/2016|UOIP|10/26/2016|

Looking for a way to change mm/dd/yyyy format to be changed to yyyy-mm-dd

Upvotes: 2

Views: 1026

Answers (4)

erwanlc
erwanlc

Reputation: 307

Probably not the cleanest way to do it, but you can try the following:

my_string = "ABC|1234|10/26/2016|PQRS|02/27/2016|"

#Split the string with the '|' character and return a list.
string_elements=my_string.split('|')

#The item 2 of the list (which is the first date) is split according to the '/' character
string_elements[2]=string_elements[2].split('/')
#The item 2 is transformed by making a rotation of the element to have the format yyyy-mm-dd and is joined on the character '-'    
string_elements[2]='-'.join(string_elements[2][-1:] + string_elements[2][:-1])

#Same as above for teh item 4 which is the second date
string_elements[4]=string_elements[4].split('/')
string_elements[4]='-'.join(string_elements[4][-1:] + string_elements[4][:-1])

#The list of item is joined with the '|' character to reform a string
my_transformed_string='|'.join(string_elements)
print my_transformed_string

The result is:

ABC|1234|2016-10-26|PQRS|2016-02-27|

Upvotes: 1

Ivan Chaer
Ivan Chaer

Reputation: 7100

You could also do a regex replacement:

import re

string = """ABC|1234|10/26/2016|PQRS|02/27/2016|

GHI|4321|02/27/2016|UOIP|10/26/2016|"""

dates = re.sub('(\d{1,2})/(\d{1,2})/(\d{4})', '\g<3>/\g<1>/\g<2>', string)

print dates

Upvotes: 0

RomanPerekhrest
RomanPerekhrest

Reputation: 92894

Use the following approach with strptime and strftime functions from datetime module:

import datetime

# while iterating through the lines with a given format
# ...
line = 'ABC|1234|10/26/2016|PQRS|02/27/2016|'

line = '|'.join([item if k not in [2,4] else datetime.datetime.strptime(item, '%m/%d/%Y').strftime("%Y-%m-%d")
        for k, item in enumerate(line.split('|'))])

print(line)

The output(for exemplary line):

ABC|1234|2016-10-26|PQRS|2016-02-27|

https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

Upvotes: 1

Moinuddin Quadri
Moinuddin Quadri

Reputation: 48110

Without using any fancy trick, you can achieve it just by using str.split() as:

>>> my_string = "ABC|1234|10/26/2016|PQRS|02/27/2016|"
>>> mm, dd, yy = my_string.split("|")[2].split("/")
>>> print "{}-{}-{}".format(yy, mm, dd)
2016-10-26

Upvotes: 0

Related Questions