Функция Python: использование пакетного файла для передачи параметров из файла .txt в функцию Python и выполнения функции - PullRequest
1 голос
/ 11 апреля 2019

Я хотел бы передать 1 или более параметров из текстового файла в функцию Python, используя пакетный файл.Это возможно?В идеале я хотел бы прочитать строку в текстовом файле, которая передала бы конкретный com-порт в функцию python, my_function, и эти действия можно выполнить с помощью командного файла

. В настоящее время я могу вызвать скрипт python, используяпакетный файл, как показано ниже.Отдельно я также могу вызвать функцию python и передать ей параметр с помощью Python Shell.Мне нужно иметь возможность передавать различные значения из текстового файла в одну и ту же функцию, в которой я застрял.

Любая помощь будет принята с благодарностью.

Текущий код пакетного файла, вызывающийскрипт Python

echo[
@echo. The Step below calls the script which opens COM 12
echo[

"C:\Python\python.exe" "C:\Scripts\open_COM12.py"

Текущий код Python для передачи параметра (номера com-порта) и вызова функции Python

import ConfigComPort as cw
from ConfigComPort import my_function
my_function('12')

Соединение успешно установлено

Содержимое текстового файла

COM_PORTS
12
19
23
22

1 Ответ

0 голосов
/ 11 апреля 2019

Если у вас есть файл с именем parameters.txt с данными

foo
bar
foobar

и функцией

def my_function(some_text):
    print("I was called with " + some_text)

Затем вы можете сделать это, чтобы передать каждую строку файла функции:

with open('parameters.txt', 'r') as my_file:
    for line in my_file:
        # remove the # and space from the next line to enable output to console:
        # print(line.rstrip())

        my_function(line.rstrip())

Обратите внимание, что метод rstrip() во всех моих примерах удаляет завершающий символ новой строки (а также другие конечные пробелы), который в противном случае был бы частью каждой строки.

Еслиу вашего файла параметров есть заголовок, как в вашем примере, у вас есть несколько возможностей пропустить это.

Например, вы можете прочитать все строки сразу в списке и затем выполнить итерации по подмножеству:

with open('parameters.txt', 'r') as my_file:
    all_lines = [line.rstrip() for line in my_file.readlines()]

# print(all_lines)

for line in all_lines[1:]:
    # print(line)

    my_function(line)

Однако, это просто проигнорирует заголовок.Если вы случайно передали неправильный файл или файл с недопустимым содержимым, это может вызвать проблемы.

Лучше проверить, правильно ли указан заголовок файла.Вы можете просто развернуть код сверху:

with open('parameters.txt', 'r') as my_file:
    all_lines = [line.rstrip() for line in my_file.readlines()]

# print(all_lines)

if all_lines[0] != 'COM_PORTS':
    raise RuntimeError("file has wrong header")

for line in all_lines[1:]:
    # print(line)

    my_function(line)

Или вы можете сделать это внутри цикла, например:

expect_header = True

with open('parameters.txt', 'r') as my_file:
    for line in my_file:
        stripped = line.rstrip()
        if expect_header:
            if stripped != 'COM_PORTS':
                raise RuntimeError("header of file is wrong")

            expect_header = False
            continue

        # print(stripped)

        my_function(stripped)

Или вы можете использовать выражение генератора для проверки заголовкавне цикла:

with open('parameters.txt', 'r') as my_file:
    all_lines = (line.rstrip() for line in my_file.readlines())

if next(all_lines) != 'COM_PORTS':
    raise RuntimeError("file has wrong header")

for line in all_lines:
    # print(line)

    my_function(line)

Я бы предпочел этот последний, так как он имеет четкую структуру и не содержит магических чисел (таких как 0 и 1, ссылаясь на то, какая строка являетсязаголовок и количество пропускаемых файлов соответственно), и не требуется считывать все строки в памяти сразу.

Однако решение, приведенное выше, которое считывает все строки в списке одновременно, вероятно, будет лучше, если выВы хотите продолжить их обработку, поскольку в этом случае данные уже доступны, и вам больше не нужно читать файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...