Как передать файл .txt в функцию в Python?
Меня просят создать функцию, которая принимает строковый аргумент, создает и возвращает кортеж, содержащий сведения о человеке, указанном в строке (например, имя, фамилия и зарплата). Строка с макетом: имя, фамилия, зарплата. Затем мне нужно создать еще одну функцию, которая принимает кортеж в качестве аргумента и печатает сведения о человеке в полях фиксированной ширины в одной строке с этим макетом: зарплата, имя, фамилия. Важно отметить, что строки должны быть взяты из файлового ввода, которое дает пользователь. Вот что я попробовал:
Мы будем благодарны за любую помощь, потому что я полностью потерялся. Заранее спасибо.
4 ответа
Давайте преобразуем эту задачу во многие маленькие и проще решать задачи.
Первая функция
Эта функция принимает строку, разбивает ее на пробелы и возвращает кортеж. Обратите внимание, что проверка ошибок не проводилась. Позже вы должны проверить правильность ввода.
Вторая функция
Здесь вы присоединяете кортеж обратно в строку. Прежде чем вы сможете присоединиться, вам нужно преобразовать каждый элемент в строку ( str(i) ).
Чтение из файла
Для чтения вы должны использовать с. Это гарантирует, что файл всегда закрыт, когда он больше не используется.
Открытие файла:
Путь к файлу должен быть либо относительно вашего текущего рабочего каталога (где находится ваш скрипт), либо абсолютным.
Разница между файлом и путем
Существует разница между путем к файлу ( path_to_file ) и фактически открытым файлом ( file ). Путь может быть введен пользователем, и вы должны использовать его, чтобы открыть файл. Пользователь не может ввести файловый объект.
Возможное сравнение, которое легче понять, может быть следующим: Подумайте о публичной библиотеке: в библиотеке есть книги, и у каждой книги есть название. Если вы хотите прочитать книгу, вам нужно найти эту книгу по названию, получить образец, открыть ее и прочитать. В этом примере название книги — это имя файла , а книга — это файл .
Чтение из файла и вызов функции
Теперь последний шаг — собрать все вещи вместе. Поэтому сначала прочитайте из файла, а затем вызовите ранее созданные функции. Чтение зависит от вашей файловой структуры. Я просто предполагаю, что у вас есть в каждой строке данные для нового человека.
Если у вас есть какие-либо вопросы к части, пожалуйста, задавайте их в комментариях.
Редактировать
Корректировки на основе содержимого файла
Одна строка в файле выглядит следующим образом: Челси правый защитник Давиде Заппакоста 20 000 000
Вам нужно расширить кортежи:
Оригинал: first_name, last_name, salary
Новый: team, position, first_name, last_name, salary
Примечание: пока просто сохраняйте зарплату как строку s и не конвертируйте ее в int или float.
Оригинал: return first_name, last_name, int(salary)
Новый: return team, position, first_name, last_name, salary
Оригинал: string_person = » «.join(str(i) for i in person_tuple)
Новый: string_person = » «.join(person_tuple)
Ресурсы
Просто в верхней части моей головы, плавник является переменной, но вы передаете его в виде простой текстовой строки
Вам нужно написать fin = open(file, «wt») в вашем try утверждении. wt в конце означает, что вы пишете , используя текст (вы также можете писать в двоичном виде)
Позже вам нужно поставить my_str = open(fin, ‘r’) , поскольку fin является объектом, а не именем фактического файла.
Передача имени файла как параметра в программу на Python
У меня есть код программы на Python, программу я запускаю через терминал и входные данные у меня находятся в файле input.txt, как мне в качестве аргумента передать название файла и чтобы это заработало?
![]()
![]()
При таком запуске
python script.py input.txt или таком
script.py input.txt
![]()
Всё ещё ищете ответ? Посмотрите другие вопросы с метками python python-3.x или задайте свой вопрос.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.10.42345
Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Функция Python: использование командного файла для передачи параметров из файла .txt в функцию Python и выполнение функции
Я хотел бы передать 1 или несколько параметров из текстового файла в функцию python с помощью пакетного файла. Это возможно? В идеале я хотел бы прочитать из строки в текстовом файле, которая передаст конкретный com-порт функции python, my_function, и эти действия могут быть выполнены с помощью пакетного файла
В настоящее время я могу вызвать скрипт Python, используя пакетный файл, как показано ниже. Отдельно я также могу вызвать функцию Python и передать ей параметр с помощью Python Shell. Мне нужно иметь возможность передавать разные значения из текстового файла в ту же функцию, в которой я застрял.
Любая помощь будет принята с благодарностью.
Текущий код пакетного файла, вызывающий скрипт Python
Текущий код Python для передачи параметра (номер COM-порта) и вызова функции Python
Соединение успешно установлено
Содержимое текстового файла





Ответы 1
Если у вас есть файл с именем parameters.txt с данными
Затем вы можете сделать это, чтобы передать каждую строку файла функции:
Обратите внимание, что метод rstrip() во всех моих примерах удаляет конечный символ новой строки (а также другие конечные пробелы), которые в противном случае были бы частью каждой строки.
Если ваш файл параметров имеет заголовок, как в вашем примере, у вас есть несколько возможностей его пропустить.
Например, вы можете сразу прочитать все строки в списке, а затем перебрать подмножество:
Однако это просто проигнорирует заголовок. Если вы случайно передали неправильный файл или файл с недопустимым содержимым, это может привести к проблемам.
Лучше проверить правильность заголовка файла. Вы можете просто расширить код сверху:
Или вы можете сделать это внутри цикла, например:
Или вы можете использовать выражение генератора для проверки заголовка вне цикла:
Я, вероятно, предпочел бы этот последний, так как он имеет четкую структуру и не содержит магических чисел (таких как 0 и 1 , обозначающих, какая строка является заголовком и сколько нужно пропустить соответственно), и ему не нужно читать все. строки в памяти сразу.
Однако приведенное выше решение, которое считывает все строки в список сразу, вероятно, лучше, если вы хотите выполнить их дальнейшую обработку, поскольку в этом случае данные уже доступны, и вам не нужно снова читать файл.
Спасибо за подробный ответ. У меня есть несколько вопросов относительно первых нескольких фрагментов кода. Я предполагаю, что код знает, как искать файл parameters.txt в расположении по умолчанию? Мое местоположение C:\Python. Кроме того, как я могу подтвердить, что функция прочитала содержимое файла параметров?
Если вы не укажете явный каталог для доступа к файлу, он будет искать в так называемом «текущем каталоге» или «рабочем каталоге». Это может быть где угодно. В командной строке вы можете сделать C: , а затем cd \some\place , чтобы изменить текущий диск и каталог. Тогда это то место, откуда скрипт будет извлекать файл. Если вместо этого вы запустите его, щелкнув ярлык (например, значок на рабочем столе или в меню «Пуск»), вы можете изменить рабочий каталог в свойствах ярлыка. Конечно, вы также можете изменить мой пример, включив в него полный путь к вашему файлу. open(‘C:\\some\\where\\file.txt’, ‘r’)
Под подтверждением вы имеете в виду, что хотите напечатать строки для отладки? Это не будет работать без нарушения во всех примерах. Единственные, где это нормально, — это два, которые считывают все строки в список. Вы можете просто сделать print(all_lines) там. Первый и последний 2 примера не так легко работают, так как они потребляют строки файла «на ходу». Тот, кто поглощает их первым, получает их, а тот, кто приходит позже, не получает ничего. В этих случаях вам придется либо снова прочитать файлы, либо использовать itertools.tee() , чтобы иметь возможность использовать их дважды.
Однако во всех примерах вы также можете распечатать каждую строку, поскольку она будет обрабатываться вместе с вызовом функции. Просто добавьте print(line) или print(stripped) над вызовом my_function(foo) , если это необходимо.
Я добавил несколько комментариев к коду, чтобы показать вам, где вы можете добавить отладочные print() s.