Как передать файл в функцию python
Перейти к содержимому

Как передать файл в функцию python

  • автор:

Потоки. Передача файлов. Клиент-серверный чат¶

Потоки (thread) в Python позволяет одновременно запускать разные подпрограммы, таким образом становится возможно выполнять несколько подпрограмм в одно и то же время. thread — это отдельный поток выполнения.

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

  1. Работа с потоками — это не работа с разными ядрами процесса, мы фактически работаем внутри того же процесса, что и без потоков, только дробим его на подзадачи, так что о более эффективном распределении ресурсов речи не идёт.
  2. В Python для обеспечения стабильности и снижения конфликтов работает специальный шлюз — Global Interpreter Lock (GIL). Он и контролирует потоки.

GIL переключает потоки по умолчанию раз в 5 миллисекунд, так что потоки работают не одновременно, а последовательно, постоянно сменяя друга.

Самая близкая идея работе потоков в Питоне — сеанс одновременной игры в шахматы, когда один шахматист играет с несколькими. Сеанс хоть и называется “одновременным”, но фактически шахматист обходит всех по очереди и делает свой ход в каждой партии.

Для работы с потоками используются модули _thread и threading (более новый).

Рассмотрим простой код для работы с потоками.:

import threading import time def thread_function(number): print(f"Thread number>: starting\n") time.sleep(2) print(f"Thread number>: finishing\n") threads = list() for index in range(3): print(f"Create and start thread index>\n") x = threading.Thread(target=thread_function, args=(index,)) threads.append(x) x.start() for i,thread in enumerate (threads): print (f'Join thread i> \n') thread.join() 

Передача файлов¶

  1. Настраиваем сокет, устанавливаем соединение.
  2. На отправляющей стороне:
    • открываем файл на чтение в режиме байтового чтения ( ‘rb’ ).
    • построчно передаём файл принимающей стороне.
  3. На принимающей стороне:
    • открываем файл на запись в режиме байтовой записи ( ‘wb’ ).
    • построчно пишем в файл всё, что получаем от передающей стороны.
  4. Закрываем файлы и соединение.

Передача файлов байтовыми строками позволяет пересылать любые файлы, независимо от их типа, расширения и т.п.

Пример кода для отправки файла с клиента серверу.

import socket import sys # создаём сокет и связываем его с IP-адресом и портом sock = socket.socket() ip = "localhost" port = 9999 sock.bind((ip, port)) # сервер ожидает передачи информации sock.listen(10) while True: # начинаем принимать соединения conn, addr = sock.accept() # выводим информацию о подключении print('connected:', addr) # получаем название файла name_f = (conn.recv(1024)).decode ('UTF-8') # открываем файл в режиме байтовой записи в отдельной папке 'sent' f = open('sent/' + name_f,'wb') while True: # получаем байтовые строки l = conn.recv(1024) # пишем байтовые строки в файл на сервере f.write(l) if not l: break f.close() conn.close() print('File received') sock.close() 
import socket import sys ip = "localhost" port = 9999 # создаём сокет для подключения sock = socket.socket() sock.connect((ip,port)) # запрашиваем имя файла и отправляем серверу f_name = input ('File to send: ') sock.send((bytes(f_name, encoding = 'UTF-8'))) # открываем файл в режиме байтового чтения f = open (f_name, "rb") # читаем строку l = f.read(1024) while (l): # отправляем строку на сервер sock.send(l) l = f.read(1024) f.close() sock.close() 

Задания¶

  1. Используя код из урока, реализуйте возможность отправлять файл с сервера клиенту.
  2. Реализуйте возможность передачи файлов как от клиента серверу, так и от сервера клиенту:
  • должна быть возможность выбрать режим передачи (1 — от клиента серверу, 2 — от сервера клиенту);
  • оформите код с помощью функций;
  • добавьте графический интерфейс с помощью модуля easygui.
  1. Используя потоки напишите клиент-серверный чат, который будет принимать и отправлять сообщения. Для этого потребуется оформить код в функции.

© Copyright Revision 07b34d26 .

Built with Sphinx using a theme provided by Read the Docs.
Read the Docs v: latest

Versions latest Downloads html On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.

Передача имени файла как параметра в программу на Python

У меня есть код программы на Python, программу я запускаю через терминал и входные данные у меня находятся в файле input.txt, как мне в качестве аргумента передать название файла и чтобы это заработало?

Отслеживать
48.8k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 17 мар 2020 в 12:02
1,273 3 3 золотых знака 12 12 серебряных знаков 34 34 бронзовых знака

Например python3 main.py input.txt , тогда из sys.argv вытаскиваете путь к файлу input.txt , открываете его и работаете

17 мар 2020 в 12:07
Если же через input() хотите считывать, тогда: python3 main.py < input.txt 17 мар 2020 в 12:13

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

При таком запуске
python script.py input.txt или таком
script.py input.txt

import sys try: file_name = sys.argv[1] # получаем 1й элемент списка (в примерах выше именно он отвечает за имя файла) except IndexError: file_name = 'input.txt' # если нам не передают имя файла, то "выбираем" его сами 

Как передать файл в переменную а потом открыть?

Доброй ночи всем, помогите решить вопрос.
Хочу с помощью перетаскивания файла его открыть.

print("Перетащите файл сюда") file = str(input()) fileopen = open(file, "r+")

После выполнения кода плюет ошибку:
OSError: [Errno 22] Invalid argument: путь к файлу

  • Вопрос задан более трёх лет назад
  • 99 просмотров

3 комментария

Простой 3 комментария

YardalGedal

Max Payne @YardalGedal
Это вы его в консоль тащить пытаетесь?

YardalGedal

Max Payne @YardalGedal
К сожалению, у меня такое извращение сработало. Пойду помою руки.

>>> print("Перетащите файл сюда") Перетащите файл сюда >>> file = str(input()) C:\Users\12222\Desktop\make.py >>> file 'C:\\Users\\12222\\Desktop\\make.py' >>> fileopen = open(file, "r+") >>> fileopen

Александр @fireSparrow

Подозреваю, что это зависит от консоли. Некоторые могут и не уметь такого. Попробуйте не вводя никакого питон-кода перетащить файл в консоль — если в ней не появится путь и имя файла, значит она такого просто не умеет, и для ваших извращений нужно использовать другую консоль.

Как сделать вызов функции из другого файла в python?

Чтобы сделать вызов функции из другого файла в python, ее необходимо сначала импортировать. Вы можете импортировать как весь файл(модуль), так и отдельно функции из него. Для импорта, каталог, в котором лежит файл, должен быть пакетом(package), то есть содержать в себе файл init.py .

Импорт модуля. В таком случае функции из модуля вызываются через точку:

from my_package import my_module # где my_package - пакет # my_module - искомый файл def main(): x = my_module.function() . 

Импорт конкретной функции из модуля:

from my_package.my_module import function def main(): x = function() . 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *