Как я могу передать имя файла в качестве параметра в мой модуль? - PullRequest
9 голосов
/ 29 января 2009

У меня есть следующий код в .py файле:

import re

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

У меня есть данные в файле .txt в виде последовательности:

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

Как я могу использовать Python-файл для обработки .txt-файла?

Полагаю, нам нужен параметр в файле .py, чтобы мы могли использовать синтаксис, аналогичный терминалу:

$ py-file file-to-be-processed

Этот вопрос был поднят по почте здесь .

1 Ответ

18 голосов
/ 29 января 2009

Вам нужно прочитать файл, а затем выполнить поиск содержимого с помощью регулярного выражения. Модуль sys содержит список argv, который содержит все параметры командной строки. Вытаскиваем второй (первый - имя файла, используемого для запуска скрипта), открываем файл и затем читаем содержимое.

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)

См. документацию по регулярным выражениям Python для получения подробной информации о том, что вы можете сделать с объектом соответствия См. эту часть документации о том, почему нам нужен поиск, а не совпадение при сканировании файла.

Этот код позволит вам использовать синтаксис, указанный в вашем вопросе.

...