2017-04-17 1 views
2

Ich habe eine Datei, die aus einer Reihe von Linien besteht, die Daten in ihnen haben, zum Beispiel:Wie zu erkennen und zu bearbeiten Datum in der Datei

1, '01-JAN-10', '04-JAN-10', 100, 'HELEN', 'PRICE' 
2, 'MARK', 'TYER', '05-JAN-10', '06-JAN-10', 120 

Ich mag das Datum Teile der Linien ändern anderes Format, aber ich weiß nicht, wie man erkennt, welcher Teil der Zeile die Datumsfelder hat, und ich weiß nicht, wie man sie durch das neue Datumsformat ersetzt. Ich habe bereits eine Funktion namens changeDate (Datum), die ein korrekt formatiertes Datum bei einem schlechten Format Datum zurückgibt. Dies ist mein Code so weit:

def editFile(filename) 
    f = open(filename) 

    while line: 
     line = f.readline() 
     for word in line.split(): 
      #detect if it is a date, and change to new format 
    f.close() 

Antwort

2

Sie können strptime und try/catch dies zu tun:

strptime

Return ein Datetime DATE_STRING entspricht, analysiert nach Format.

Weitere Details von strftime() and strptime() Behavior.

from datetime import datetime 

s="1, '01-JAN-10', '04-FEB-28', 100, 'HELEN', 'PRICE'" 
for word in s.replace(' ','').replace('\'','').split(','): 
    try: 
     dt=datetime.strptime(word,'%y-%b-%d') 
     print('{0}/{1}/{2}'.format(dt.month, dt.day, dt.year)) 
    except Exception as e: 
     print(word) 

Ergebnis:

1 
1/10/2001 
2/28/2004 
100 
HELEN 
PRICE 
+0

Danke, wie kann ich bearbeiten die Datei tatsächlich so, dass es nun die Zeile enthält 1, '2001.01.10', '2004.02.28', 100, 'HELEN', ‚PREIS ' –

+0

@ArnoldHotz Sie können es an eine Liste anhängen und die Liste in eine Datei schreiben. Schauen Sie sich diese [Frage] (http://stackoverflow.com/questions/899103/writing-a-list-to-a-file-with-python) an und versuchen Sie es. – McGrady

0

Sie können regex verwenden zu erkennen. Es ist schwierig, die Datei an Ort und Stelle zu ändern, vielleicht könnten Sie alle neuen Inhalte in eine neue Datei schreiben.

import re 
with open('filename', 'r') as f: 
    input_file = f.read() 
# input_file = "1, '01-JAN-10', '04-JAN-10', 100, 'HELEN', 'PRICE'" 
dates = re.findall(r'\d+-[A-Za-z]+-\d+', input_file) # output: ['01-JAN-10', '04-JAN-10'] 
for old in dates: 
    input_file.replace(old, changeDate(old)) # your changeDate(date) in your question 
with open('new_file', 'w+') as f: 
    f.write(input_file) 
Verwandte Themen