Как передать изображение в функцию Python из JS eel?
Я использую модуль Python eel для создания простого приложения, которое принимает изображение через WEB интерфейс и сохраняет его в новом файле через Python. При передаче переменной с файлом в функцию Python, я получаю следующую ошибку
TypeError: expected str, bytes or os.PathLike object, not dict
Насколько я понимаю, Python воспринимает изображение как словарь, который нельзя сохранить в файл, так как функция open() принимает str, bytes or os.PathLike object
Вопрос в том, как правильно передавать изображение из JS в Python, чтобы с ним можно было дальше работать, например сохранять как новый файл?
Получаю изображения из HTML
$(document).ready(function()< var dropZone = $('#upload-container'); dropZone.on('drag dragstart dragend dragover dragenter dragleave drop', function()< return false; >); dropZone.on('dragover dragenter', function() < dropZone.addClass('dragover'); >); dropZone.on('dragleave', function(e) < let dx = e.pageX - dropZone.offset().left; let dy = e.pageY - dropZone.offset().top; if ((dx < 0) || (dx >dropZone.width()) || (dy < 0) || (dy >dropZone.height())) < dropZone.removeClass('dragover'); >>); dropZone.on('drop', function(e) < dropZone.removeClass('dragover'); let files = e.originalEvent.dataTransfer.files; print_hello(files); >); $('#file-input').change(function() < let files = this.files; print_hello(files); >); >)
Передаю переменную из JS в Python:
async function print_hello(files)
Пытаюсь открыть и сохранить изображение в Python
import eel #import os #import json #from PIL import Image @eel.expose def start_func(file): with open(file, 'rb') as imgfile: output = open("file02.jpg","wb") output.write(imgfile.read()) output.close() return "Файл получен" eel.init("web") eel.start("uniq.html", size=(1080, 1080))
- Вопрос задан более двух лет назад
- 460 просмотров
Как сделать вызов функции из другого файла в 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() .
Передача имени файла как параметра в программу на Python
У меня есть код программы на Python, программу я запускаю через терминал и входные данные у меня находятся в файле input.txt, как мне в качестве аргумента передать название файла и чтобы это заработало?
Отслеживать
48.7k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 17 мар 2020 в 12:02
1,273 3 3 золотых знака 12 12 серебряных знаков 33 33 бронзовых знака
Например 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' # если нам не передают имя файла, то "выбираем" его сами
Python. Урок 12. Ввод-вывод данных. Работа с файлами
![]()
В уроке рассмотрены основные способы ввода и вывода данных в Python с использованием консоли, и работа с файлами: открытие, закрытие, чтение и запись.
Вывод данных в консоль
Один из самых распространенных способов вывести данные в Python – это напечатать их в консоли. Если вы находитесь на этапе изучения языка, такой способ является основным для того, чтобы быстро просмотреть результат свой работы. Для вывода данных в консоль используется функция print.
Рассмотрим основные способы использования данной функции.
>>> print("Hello") Hello >>> print("Hello, " + "world!") Hello, world! >>> print("Age: " + str(23)) Age: 23
По умолчанию, для разделения элементов в функции print используется пробел.
>>> print("A", "B", "C") A B C
Для замены разделителя необходимо использовать параметр sep функции print.
print("A", "B", "C", sep="#") A#B#C
В качестве конечного элемента выводимой строки, используется символ перевода строки.
>>> for i in range(3): print("i: " + str(i)) i: 0 i: 1 i: 2
Для его замены используется параметр end.
>>> for i in range(3): print("[i: " + str(i) + "]", end=" -- ") [i: 0] -- [i: 1] -- [i: 2] --
Ввод данных с клавиатуры
Для считывания вводимых с клавиатуры данных используется функция input().
>>> input() test 'test'
Для сохранения данных в переменной используется следующий синтаксис.
>>> a = input() hello >>> print(a) hello
Если считывается с клавиатуры целое число, то строку, получаемую с помощью функции input(), можно передать сразу в функцию int().
>>> val = int(input()) 123 >>> print(val) 123 >>> type(val) class 'int'>
Для вывода строки-приглашения, используйте ее в качестве аргумента функции input().
>>> tv = int(input("input number: ")) input number: 334 >>> print(tv) 334
Преобразование строки в список осуществляется с помощью метода split(), по умолчанию, в качестве разделителя, используется пробел.
>>> l = input().split() 1 2 3 4 5 6 7 >>> print(l) ['1', '2', '3', '4', '5', '6', '7']
Разделитель можно заменить, указав его в качестве аргумента метода split().
>>> nl = input().split("-") 1-2-3-4-5-6-7 >>> print(nl) ['1', '2', '3', '4', '5', '6', '7']
Для считывания списка чисел с одновременным приведением их к типу int можно воспользоваться вот такой конструкцией.
>>> nums = map(int, input().split()) 1 2 3 4 5 6 7 >>> print(list(nums)) [1, 2, 3, 4, 5, 6, 7]
Работа с файлами
Открытие и закрытие файла
Для открытия файла используется функция open(), которая возвращает файловый объект. Наиболее часто используемый вид данной функции выглядит так open(имя_файла, режим_доступа).
Для указания режима доступа используется следующие символы:
‘r’ – открыть файл для чтения;
‘w’ – открыть файл для записи;
‘x’ – открыть файл с целью создания, если файл существует, то вызов функции open завершится с ошибкой;
‘a’ – открыть файл для записи, при этом новые данные будут добавлены в конец файла, без удаления существующих;
‘b’ – бинарный режим;
‘t’ – текстовый режим;
‘+’ – открывает файл для обновления.
По умолчанию файл открывается на чтение в текстовом режиме.
У файлового объекта есть следующие атрибуты.
file.closed – возвращает true если файл закрыт и false в противном случае;
file.mode – возвращает режим доступа к файлу, при этом файл должен быть открыт;
file.name – имя файла.
>>> f = open("test.txt", "r") >>> print("file.closed: " + str(f.closed)) file.closed: False >>> print("file.mode: " + f.mode) file.mode: r >>> print("file.name: " + f.name) file.name: test.txt
Для закрытия файла используется метод close().
Чтение данных из файла
Чтение данных из файла осуществляется с помощью методов read(размер) и readline().
Метод read(размер) считывает из файла определенное количество символов, переданное в качестве аргумента. Если использовать этот метод без аргументов, то будет считан весь файл.
>>> f = open("test.txt", "r") >>> f.read() '1 2 3 4 5\nWork with file\n' >>> f.close()
В качестве аргумента метода можно передать количество символом, которое нужно считать.
>>> f = open("test.txt", "r") >>> f.read(5) '1 2 3' >>> f.close()
Метод readline() позволяет считать строку из открытого файла.
>>> f = open("test.txt", "r") >>> f.readline() '1 2 3 4 5\n' >>> f.close()
Построчное считывание можно организовать с помощью оператора for.
>>> f = open("test.txt", "r") >>> for line in f: . print(line) . 1 2 3 4 5 Work with file >>> f.close()
Запись данных в файл
Для записи данных файл используется метод write(строка), при успешной записи он вернет количество записанных символов.
>>> f = open("test.txt", "a") >>> f.write("Test string") 11 >>> f.close()
Дополнительные методы для работы с файлами
Метод tell() возвращает текущую позицию “условного курсора” в файле. Например, если вы считали пять символов, то “курсор” будет установлен в позицию 5.
>>> f = open("test.txt", "r") >>> f.read(5) '1 2 3' >>> f.tell() 5 >>> f.close()
Метод seek(позиция) выставляет позицию в файле.
>>> f = open("test.txt", "r") >>> f.tell() 0 >>> f.seek(8) 8 >>> f.read(1) '5' >>> f.tell() 9 >>> f.close()
Хорошей практикой при работе с файлами является применение оператора with. При его использовании нет необходимости закрывать файл, при завершении работы с ним, эта операция будет выполнена автоматически.
>>> with open("test.txt", "r") as f: . for line in f: . print(line) . 1 2 3 4 5 Work with file Test string >>> f.closed True
P.S.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
>>
Раздел: Python Уроки по Python Метки: Python, Уроки Python
Python. Урок 12. Ввод-вывод данных. Работа с файлами : 2 комментария
- Моксим23.11.2020 “Преобразование строки в список осуществляется с помощью метода split(), по умолчанию, в качестве разделителя, используется пробел.”
Разделитель по умолчанию не пробел, а пустое пространство
- Алексей 01.06.2021 Ого, действительно:
>>> “1 2 3 4 5 7”.split()
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘7’]
И даже так:
>>> “1 2 \n 21 12 4”.split()
[‘1’, ‘2’, ’21’, ’12’, ‘4’]