2009-01-29 9 views
7

J'ai le code suivant dans le fichier .py:Comment puis-je transmettre un nom de fichier en tant que paramètre dans mon module?

import re 

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

J'ai les données dans le fichier txt comme une séquence:

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 

Comment puis-je utiliser le -file Python pour traiter la. txt-fichier?

Je suppose que nous avons besoin d'un paramètre dans le fichier .py, de sorte que nous pouvons utiliser une syntaxe comme dans le terminal:

$ py-file file-to-be-processed 

Cette question a été soulevée par le poste here.

+0

La réponse d'Andrew est de fournir tout ce que vous avez demandé. – Geo

Répondre

17

Vous devez lire le fichier et rechercher le contenu à l'aide de l'expression régulière. Le module sys contient une liste, argv, qui contient tous les paramètres de la ligne de commande. Nous retirons le second (le premier est le nom du fichier utilisé pour exécuter le script), ouvrons le fichier, puis lisons le contenu.

 
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) 

Voir la Python regular expression documentation pour plus de détails sur ce que vous pouvez faire avec l'objet de match. Voir this part of the documentation pour pourquoi nous avons besoin de rechercher plutôt que de faire correspondre lors de la numérisation du fichier.

Ce code vous permettra d'utiliser la syntaxe que vous avez spécifiée dans votre question.

Questions connexes