2009-01-29 4 views
7

Ich habe den folgenden Code in Py-Datei:Wie kann ich einen Dateinamen als Parameter in mein Modul übergeben?

import re 

regex = re.compile(
    r"""ULLAT:\ (?P<ullat>-?[\d.]+).*? 
    ULLON:\ (?P<ullon>-?[\d.]+).*? 
    LRLAT:\ (?P<lrlat>-?[\d.]+)""", re.DOTALL|re.VERBOSE) 

Ich habe die Daten in TXT-Datei als eine Sequenz:

QUADNAME: rockport_colony_SD 
RESOLUTION: 10 ULLAT: 43.625 ULLON: 
-97.87527466 LRLAT: 43.5 LRLON: -97.75027466 HDATUM: 27 ZMIN: 361.58401489 ZMAX: 413.38400269 ZMEAN: 396.1293335 ZSIGMA: 12.36359215 PMETHOD: 5 QUADDATE: 20001001 

Wie kann ich den Python -Dateien verwende das zu verarbeiten. txt-Datei?

Ich denke, dass wir einen Parameter in der Py-Datei benötigen, so dass wir eine Syntax wie in Terminal verwenden können:

$ py-file file-to-be-processed 

Diese Frage nach dem Beitrag here angehoben wurde.

+0

Andrew's Antwort liefert alles, was Sie gefragt haben. – Geo

Antwort

17

Sie müssen die Datei einlesen und dann den Inhalt mit dem regulären Ausdruck suchen. Das sys-Modul enthält eine Liste argv, die alle Befehlszeilenparameter enthält. Wir ziehen den zweiten heraus (der erste ist der Dateiname, der zum Ausführen des Skripts verwendet wird), öffnen die Datei und lesen dann den Inhalt ein.

 
import re 
import sys 

file_name = sys.argv[1] 
fp = open(file_name) 
contents = fp.read() 

regex = re.compile(
    r"""ULLAT:\ (?P-?[\d.]+).*? 
    ULLON:\ (?P-?[\d.]+).*? 
    LRLAT:\ (?P-?[\d.]+)""", re.DOTALL|re.VERBOSE) 

match = regex.search(contents) 

Siehe Python regular expression documentation für Details auf, was Sie mit dem Match-Objekt tun können. Siehe this part of the documentation, warum wir beim Scannen der Datei suchen und nicht übereinstimmen müssen.

Mit diesem Code können Sie die in Ihrer Frage angegebene Syntax verwenden.