Импортирование перменной из __name__ == __main__
<code>
if __name__ == "__main__":
    # Create engine
    engine = CarEngine()
</code>
Есть такой код, так вот когда пытаюсь импортировать из этого файла переменную engine -

from file import engine

Ввыдается ошибка что cannot import name engine, вопрос - как правильно импортировать из name == main?

Переменная
__name__ равна
__main__ только в точке входа в программу - в скрипте переданном интерпретатору при запуске. В импортируемых скриптах эта переменная
__main__ не равна, поэтому блок
if не будет выполнен и переменная
engine не будет определена.
Соответствующий раздел документации.


Вытащить динамичную фразу из большой строки
В общем, у меня есть огромная строка, из которой необходимо вытащить в данном случае "Ливерпуль - Бавария". Эта фраза меняется каждый раз. Многоточия означают, что там еще куча всего перед и после. Думал насчет регулярок, но я в них полный ноль.
<code>
`.......initialEvents: {"enabled":true,"totalCount":8,"events":[{"id":281474982553600,"name":"Ливерпуль - Бавария","competitors":[{"id":281474976720725,"name":"Ливерпуль","homeAway":"HOME","type":"TEAM",........`
</code>
Пс. Этот словарь - не словарь и не json, это всё строка. И там еще другой разнообразный текст.

Красивое решение с регулярными выражениями напишет кто-нибудь другой. Можно вытащить нужную вам часть сплитами. С другими строками будет работать в том случае, если ключи  в
inititalEvents находятся в той же последовательности.

s = '.......initialEvents: {"enabled":true,"totalCount":8,"events":[{"id":281474982553600,"name":"Ливерпуль - Бавария","competitors":[{"id":281474976720725,"name":"Ливерпуль","homeAway":"HOME","type":"TEAM",........'

result = (s.split('initialEvents: {')[1]
           .split('"name":"')[1]
           .split('","competitors"')[0])

print(result)
# Ливерпуль - Бавария


Как получить доступ к методу другого класса в Python?
Есть тест tests.tests_list

def test_exp(app):
    app.search360.exp()

Есть метод в классе MainClass в fixture.main

class MainClass:
    def __init__(self, app):
        self.app = app
    def myfun(self):
        print("some text")

Есть метод в классе ExpClass в fixture.exp

class ExpClass:
    def __init__(self, app):
        self.app = app
    def fun(self):
        ???

Есть еще класс Application в fixture.application:

from fixture.exp import ExpClass
from fixture.main import MainClass

class Application:
   def __init__(self):
   self.exp = ExpClass(self)
   self.main = MainClass(self)

Вопрос: как мне вызвать функцию из main в exp (где ???)?
Заранее благодарствую)

Если я вас правильно понял, то в классе ExpClass метод должен выглядеть так:
<code>
def fun(self):
    self.app.main.myfun()
</code>


Есть ли в python функция экранирования кавычек?
т.е. нужно, чтобы строки типа:

string 'test' string

конвертировались в

string \'test\' string

нашёл тут похожую проблему
Как экранировать все спецсимволы в строке?
но .encode('string-escape') не распознаётся, а shlex.quote делает не то.
Оно, в принципе, просто пишется, но решил спросить прежде, чем велосипеды конструировать, может есть что-то стандартное в языке для этого...
Нужно для корректного экспорта в PostgreSQL. т.е. у меня Where-Statement строится в python, потом в Delphi соединяется с основным запросом и отправляется в BD. Если параметры содержат апострофы, начинаются проблемы. Парсить весь ответ в Delphi тоже не хотелось бы, проще сразу от phyton получать в правильном виде

UPDATE: судя по уточнению в комментариях речь в вопросе идет об экранировании кавычек в литералах, являющихся частью SQL строки / текста.
Если использовать
prepared statements, то SQL клиент / драйвер сделает всю грязную работу за вас и в качестве бонуса вы получите защиту от
SQL injections.
Пример:

import psycopg2
from sqlalchemy import create_engine

# conn = create_engine('postgresql://user:password@host:port/dbname')
conn = create_engine('postgresql+psycopg2://user:password@host:port/dbname')
cur = conn.cursor()

qry = """
SELECT * from table_name WHERE fieldname LIKE(:param_A)
"""
params=("xxxx'A'-%", )

cur.execute(qry, params=params)

for row in cur.fetchall():
    #print(row)
    #...

Используйте модуль
json:

import json

s = "string 'test' string"
escaped = json.dumps(s)

значение переменной в iPython:

In [102]: escaped
Out[102]: '"string \'test\' string"'

Проверка через запись в файл:

In [103]: from pathlib import Path

In [104]: Path("c:/temp/out.txt").write_text(escaped)
Out[104]: 22

In [105]: Path("c:/temp/out.txt").read_text()
Out[105]: '"string \'test\' string"'

c:/temp/out.txt:

"string 'test' string"


path('post/<str:slug>/', post_detail, name='post_detail_url') выдает ошибку: "SyntaxError: invalid syntax"
Выдаёт ошибку

SyntxError: invalid syntax у файла urls.py

на 8 строке.
urls.py:

    from django.urls import path
    from .views import *

    #some-title

    urlpatterns = [
        path('', posts_list, name='posts_list_url')
        path('post/<str:slug>/', post_detail, name='post_detail_url')
    ]

models.py:

    from django.db import models
    from django.shortcuts import reverse

    # Create your models here.
    class Post(models.Model):
        title = models.CharField(max_length=150, db_index=True)
        slug = models.SlugField(max_length=150, unique=True)
        body = models.TextField(blank=True, db_index=True)
        date_pub = models.DateTimeField(auto_now_add=True)

        def get_absolute_url(self):
            return('post_detail_url', kwargs={'slug': self.slug})

        def __str__(self):
            return '{}'.format(self.title)

views.py:

    from django.shortcuts import render
    from .models import Post

    # Create your views here.
    def posts_list(request):
        posts = Post.objects.all()
        return render(request, 'blog/index.html', context={'post':post})

    def post_detail(request, slug):
        post = Post.objects.get(slug__iexact=slug)
        return render(request, 'blog/post_detail.html', context={'post': post})

Нужна запятая после
path('', posts_list, name='posts_list_url'),


Редактирование DataFrame по условию
Итак, есть исходный DF:

Год x1  x2  x3
1   5   9   8
2   6   9   7
3   7   8   8
4   9   8   9
5   9   9   8
6   8   8   7
7   9   8   9
8   8   9   9
9   8   8   9
10  9   9   8
1   5   9   8
2   5   6   5
3   6   5   4
4   6   6   4
5   6   6   5
6   4   6   6

Необходимо отредактировать его таким образом, чтобы
x1 соответствовали предыдущие значения
x2,
x3. То есть берем
x1 за второй год и ставим ему в соответствии значения за 1 год. Когда год перестает повышаться, значит пошел новый цикл, то есть заново берем второй год "второй партии". На выходе необходимо получить нечто такое:

Год x1  x2  x3
2   6   9   8
3   7   9   7
4   9   8   8
5   9   8   9
6   8   9   8
7   9   8   7
8   8   8   9
9   8   9   9
10  9   8   9
2   5   9   8
3   6   6   5
4   6   5   4
5   6   6   4
6   4   6   5


единая функция для нескольких датафреймов в pandas
Коллеги, помогите с написанием одной функции для нескольких датафреймов.
к примеру имеется 3 одинаковых датафрейма но разные по годам
df2014:

id   'оборотные активы' 'активы'  'капитал  'крат.об-ва'
123     19764         2746539     472        2854
497     49287         2980756     5283       9782

df2015:

id   'оборотные активы' 'активы'  'капитал  'кратк.об-ва'
12     36728            2567834     192837        39280
97    2908             9427689     3209849       198

необходимо рассчитать коэфф. показателей и добавить в каждый датафрейм в новые столбцы. Хочется написать одну функцию типа def ratios (df), которую через apply можно было подставить к соответствующему датафрейму.
результат примерно должен был выглядеть вот так:
df2014:

id   'оборотные активы' 'активы'  'капитал  'крат.об-ва'  'wc'  'cl'    'er'
123     19764         2746539     472        2854         16910  6.925   0.00017
497     49287         2980756     5283       9782         39505  5.03   0.0017

я попытался написать следующую функцию, но кажись некорректно применяю:

def ratios(df):
   df['wc'] = df['оборотные активы'] - df['крат.об-ва']
   df['cl'] = df['оборотные активы'] / df['крат.об-ва']
   df['er'] = df['капитла'] / df['активы']
   return df
df2014 = df2014.apply(ratios)

но увы кроме ошибок ничего не выходит


Как передать картинку сгенерированную PIL через POST запрос?
Как передать картинку сгенерированную в PIL через POST запрос в формате multipart/form-data.
Вот код передачи изображения

requests.post(upload_url, files = {'file': open(filename, 'rb')})

Задача заключается в передачи изображения без его сохранения как отдельного файла.
Пробовал через BytesIO. Не получается.

img = pic_gen.gen_obj(parcer.main()) #Создаю изображение

buf = io.BytesIO()
img.save(buf, format='PNG')
buf.seek(0, 0)
#a = io.BufferedReader(buf)
album_id = ID альбома
group_id = ID группы

token = 'ТОКЕН'
api = vk.API(vk.Session(access_token=token), v=5.92)
upload_url = api.photos.getWallUploadServer(group_id=group_id)['upload_url']
resp = requests.post(upload_url, files = {'file': buf.getvalue()}).json()
s = api.photos.saveWallPhoto(group_id=group_id, server = resp['server'], photo= resp['photo'], hash = resp['hash'])
api.wall.post(owner_id = -group_id, message="Test!", attachments=f"photo{s[0]['owner_id']}_{s[0]['id']}")

from io import BytesIO
import requests
from PIL import Image

im = Image.new('RGB', (128, 128), (255, 0, 0, 255))
# [вставить сюда код усердного рисования картинки]

fp = BytesIO()
im.save(fp, format='PNG')

# Переключаем позицию чтения в начало файла, чтобы
# requests смог его прочитать
fp.seek(0)

requests.post(
    upload_url,
    # Капризные серверы могут запросить имя файла
    # и MIME-тип — укажем их
    # (для JPEG соответственно нужно указать image/jpeg)
    files={'file': ('photo.png', fp, 'image/png')},
)


Telegram Bot API выполнять действие при нажатие на ссылку
Что надо сделать, что бы при нажатие на кнопку InlineKeyboardButton URL выполнялось действие до переходе по ссылке, например добавление записи в БД. Событие похожее на onclick в js, но не могу найти нечего похожего в документации

Принудительное перенаправление пользователя по ссылке (открытие браузера) невозможно.
Попробуйте использовать сервис типа bitly для отслеживания статистики по кликам. Если же вам нужно записывать какие-то данные о пользователе в БД и ссылка ведёт на ваш веб-сервис, то добавьте необходимые данные в параметры ссылки и делайте сохранение в БД на стороне веб-сервиса.


Ошибка в документации модуля multiprocessing
В документации модуля multiprocessing есть раздел про синхронизацию между процессами

from multiprocessing import Process, Lock

def f(l, i):
    l.acquire()
    try:
        print('hello world', i)
    finally:
        l.release()

if __name__ == '__main__':
    lock = Lock()

    for num in range(10):
        Process(target=f, args=(lock, num)).start()

Сам пример предполагает последовательное выведение значений, но при запуске его из под idle получается примерно такой результат(который ещё и меняется при разных запусках)

hello world 0
hello world 1
hello world 2
hello world 7
hello world 3
hello world 5
hello world 6
hello world 4
hello world 9
hello world 8

Собственно совершенно непонятно из-за чего это происходит и как это можно исправить без .join()

Нет, пример не предполагает соблюдения порядка выполнения. Блокировки гарантируют только то, что один процесс в один момент времени будет выводить данные на экран и у вас не получится чего-то такого:
<code>
hello world 0
hello world 1
hello worhledl 3
lo world 2
hello world 4
hello world 5
hello worldh 7
ello world 8
hello world 6
hello world 9
</code>
О чём в документации ясно написано:

For instance one can use a lock to ensure that only one process prints
  to standard output at a time:
  ...
  Without using the lock output from the different processes is liable
  to get all mixed up.


Как избежать подсчёт значения NaN?

data_wm_1 = data[(data['Pclass'] == '1') & (data['Sex'] == 'female')]
data_wm_2 = data[(data['Pclass'] == '2') & (data['Sex'] == 'female')]
data_wm_3 = data[(data['Pclass'] == '3') & (data['Sex'] == 'female')]
data_m_1 = data[(data['Pclass'] == '1') & (data['Sex'] == 'male')]
data_m_2 = data[(data['Pclass'] == '2') & (data['Sex'] == 'male')]
data_m_3 = data[(data['Pclass'] == '3') & (data['Sex'] == 'male')]

print(data_m_1['Age'].mean())
print(data_m_2['Age'].mean())
print(data_m_3['Age'].mean())
print(data_wm_1['Age'].mean())
print(data_wm_2['Age'].mean())
print(data_wm_3['Age'].mean())

Результат:

nan
nan
nan
nan
nan
nan

Это происходит из-за того, что в некоторых столбцах присутствуют значения
NaN. И у меня вопрос - как избежать подсчёт этого значения, то есть считать все значения кроме nan?

Pandas достаточно умный, чтобы не учитывать
NaN при расчете среднего значения.
Пример:

In [199]: pd.Series([1,2,3,np.nan,np.nan]).mean()
Out[199]: 2.0

In [200]: pd.Series([1,2,3]).mean()
Out[200]: 2.0

То что вы пытаетесь сделать можно сделать элегантнее:

In [205]: data = pd.read_csv(r'D:\work\.data\titanic\train.csv')

In [206]: data.groupby(['Pclass', 'Sex'], as_index=False)[['Age']].mean()
Out[206]:
   Pclass     Sex        Age
0       1  female  34.611765
1       1    male  41.281386
2       2  female  28.722973
3       2    male  30.740707
4       3  female  21.750000
5       3    male  26.507589

PS на будущее советую всегда приводить примеры входных и выходных данных в вопросах по Pandas / Numpy / SciPy / Machine Learning / etc.


Как заменить NaN в серии Pandas с помощью словаря?
Есть DataFrame:

    Customer    City
0   Customer 1  Moscow
1   Customer 1  Moscow
2   Customer 1  Moscow
3   Customer 1  NaN
4   Customer 2  New York
5   Customer 2  New York
6   Customer 2  New York
7   Customer 2  NaN
8   Customer 2  NaN
9   Customer 2  NaN
10  Customer 2  NaN
11  Customer 2  NaN
12  Customer 3  London
13  Customer 3  London
14  Customer 3  London
15  Customer 3  NaN
16  Customer 4  Paris
17  Customer 5  NaN
18  Customer 5  Deli

И есть словарь:

{'Customer 1': 'Moscow',
 'Customer 2': 'New York',
 'Customer 3': 'London',
 'Customer 4': 'Paris',
 'Customer 5': 'Deli'}

Подскажите, пожалуйста, как заменить 'NaN' в DataFrame на соответствующие значения в словаре по Customer? Я пробовал через метод loc получать доступ к пустым значениям и выполнять replacе по данному словарю, но такой алгоритм берет первое значение City из словаря и заменяет все 'NaN' на него.

словарь замены:

mapping = {
 'Customer 1': 'Moscow',
 'Customer 2': 'New York',
 'Customer 3': 'London',
 'Customer 4': 'Paris',
 'Customer 5': 'Deli'}

маска замены (учитывает варианты когда
NaN - это
np.NaN или просто строка
"NaN"):

mask = df['City'].astype('str').isin(['NaN','nan'])

замена:

df.loc[mask, 'City'] = df.loc[mask, 'Customer'].map(mapping)

результат:

In [160]: df
Out[160]:
      Customer      City
0   Customer 1    Moscow
1   Customer 1    Moscow
2   Customer 1    Moscow
3   Customer 1    Moscow
4   Customer 2  New York
5   Customer 2  New York
6   Customer 2  New York
7   Customer 2  New York
8   Customer 2  New York
9   Customer 2  New York
10  Customer 2  New York
11  Customer 2  New York
12  Customer 3    London
13  Customer 3    London
14  Customer 3    London
15  Customer 3    London
16  Customer 4     Paris
17  Customer 5      Deli
18  Customer 5      Deli

вот более идиоматический вариант заполнения отсутствующих значений в группе соседними значениями (не требует словаря замены):

df['City'] = df.groupby('Customer')['City'].apply(lambda x: x.ffill().bfill())


Ошибка в регулярном выражении на Python 3.x
Мне надо вычленить все предложения из текста (кроме первого предложения), где есть фраза про километры.

Магазин Автозапчастей находится в городе Москва. До него ехать 12 км. В магазине продаются автозапчасти от автомобиля Нива. Курган находится в 1000 км от магазина.

Предложения я вычленяю от точки до точки. Но маска не работает. Подскажите в чем ошибка.

import re

print('введите текст:')
x1 = str(input())
pattern = re.findall('\.\s\w+\s+(\d км*).*?\.', x1)
print(pattern)

Попробуйте:

import re

text = 'Магазин Автозапчастей находится в городе Москва. До него ехать 12 км. В магазине продаются автозапчасти от автомобиля Нива. Курган находится в 1000 км от магазина. '

items = re.findall('[^.]*\d+\s+км.*?\.', text)
print(items)  # ['До него ехать 12 км.', 'Курган находится в 1000 км от магазина.']

Или попробуйте сделать сначала разбитие на предложения (считаем что они отделяются точками с пробелом), а после анализируем каждую часть ища в ней упоминание километров.
В отличии от варианта выше этот вариант более устойчивый:

import re

text = 'Магазин Автозапчастей находится в городе Москва. До него ехать 12 км. Магазин Автозапчастей находится в городе Москва. В магазине продаются автозапчасти от автомобиля Нива. Курган находится в 1000 км от магазина.'

items = list(filter(lambda text: re.search('\d+\s+км', text), text.split('. ')))
print(items)  # ['До него ехать 12 км', 'Курган находится в 1000 км от магазина.']


Валидация модели в Django. В чем моя ошибка?
Задача:
(POST) /api/v1/goods/ - создать товар в магазине.
Формат запроса: application/json.
Пример запроса:
{
  "title": "Сыр \"Российский\"",
  "description": "Очень вкусный сыр, да еще и российский.",
  "price": 100
}.
Ограничения:
- Все поля обязательные
- title - не пустая строка, не длиннее 64 символов.
- description - не пустая строка, не длиннее 1024 символов.
- price - не пустая строка (которую можно перевести в целое число) или целое число, значения от 1 до 1000000.
Возможные ответы:
- 201 - товар успешно сохранен.
  Пример ответа:
    {"id": 112}.
- 400 - запрос не прошел валидацию.
models.py.

from django.db import models

class Item(models.Model):
    """Модель товара."""
    title = models.CharField(max_length=64)
    description = models.CharField(max_length=1024)
    price = models.PositiveIntegerField()

views.py

import json
from django.http import HttpResponse, JsonResponse
from django.views import View
from .models import Item, Review

class AddItemView(View):
    """View для создания товара."""

    def post(self, request):
        item = Item(request.POST)

        if item.full_clean():
            data = Item(title = item.title, description = item.description, price = item.price)
            data.save()
            #data = {'id': data.id}

            return JsonResponse(data, status=201)
        else:
            return JsonResponse(data, status=400)

Предполагаю, что этот кусочек из Forms

item = Item(request.POST)

А этот из Models

data = Item(title = item.title, description = item.description, price = item.price)

Вам нужно создать форму из своей модели в файле forms.py, подключить ее, а потом уже передавать ей request.POST


Активное подключение к БД
Подскажите как постоянно отправлять данные в бд.
Я написал мини-прогу которая отправляет данные в бд, но заметил один момент если подождать N время соединение разрываеться, я когда писал подобное приложение в терминале, я там использовал цикл и соединение было всегда активное, а сейчас интерфейс делаю и не знаю как это реализовать.
Мой код:
<code>
import pymysql.cursors
import pymysqlpool
from tkinter import *

# Подключение к БД
connection = pymysql.connect(host='127.0.0.1',
                             user='root',
                             password='',
                             db='python',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor,
                             autocommit=True)

root = Tk()
root.title("Считыватель Штрих кодов и комит в БД")

def func(event):
    label = Label(text = name.get())

    try:
        with connection.cursor() as cursor:
            # Отправка SQL запроса
            sql = "INSERT INTO `scaner` (`number`) VALUES (%s)"
            cursor.execute(sql, (label['text']))

        # Сохранение изменения
        connection.commit()

    finally:
        print(label['text'])
        name_entry.delete(0, END)
root.bind('<Return>', func)
def display_full_name():

    label = Label(text = name.get())

    try:
        with connection.cursor() as cursor:
            # Отправка SQL запроса
            sql = "INSERT INTO `scaner` (`number`) VALUES (%s)"
            cursor.execute(sql, (label['text']))

        # Сохранение изменения
        connection.commit()

    finally:
        print(label['text'])
        name_entry.delete(0, END)

name = StringVar()
name_label = Label(text="Введите штрихкод:")
name_label.grid(row=0, column=0, sticky="w")
name_entry = Entry(textvariable=name)
name_entry.grid(row=0,column=1, padx=5, pady=5)
message_button = Button(text="Отправить", command=display_full_name)
message_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")

root.mainloop()

</code>

я бы сделал на вашем месте что-то вроде класса-коннектора к БД, у которого, например будет метод
execute, в котором перед исполнением будете проверять активно ли соединение с бд, если нет, то делать реконнект.
Что-то вроде такого:

class DBExecutor():
    def __init__(self, **connection_params):
        self._connection_params = connection_params
        self._connection = None

    def _connect(self):
        self._connection = pymysql.connect(**self._connection_params)

    def execute(self, sql, *args, **kwargs):
        if not (self._connection and self._connection.ping(True)):
            self._connect():
        with self._connection.cursor() as cursor:
            cursor.execute(sql, *args, **kwargs)

        self._connection.commit()

# использование
db_executor = DBExecutor(host='127.0.0.1', user='root', password='', db='python', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor, autocommit=True)
db_executor.execute("INSERT INTO `scaner` (`number`) VALUES (%s)", ('text',))


Сравнивание строки через Python
Требуется сравнивать текст из файла с вариантами из массива. В файле только начальная часть будет совпадать с одним из вариантов.
Пример: В файле будет в таком виде - e/u/1/5/1.0562/15:50, а одним из вариантов в массиве будет e/u/1/5/, эта первая часть будет одним вариантом из массива. Как это реализовать или куда копнуть или чем? Делаю на python3.

Пишите функцию поиска самой длинной совпадающей части двух строк.
Сравниваете со всеми образцами и запоминаете длину совпавшей части.
Находите максимальную длину
Соответствующий образец - то, что Вы ищите.

Нечто вроде:
<code>
# Функция проверки начала строк
def len_equ(s1, s2):
    rc = 0
    while s1[rc] == s2[rc]:
         rc = rc + 1

    return rc

# Образцы для сравнения
key_preffix = (
    'z1234',
    '1zzzz',
    '12zzz',
    '123zz',
    '1234z',
    '123xx',
    '12xxx',
    '1xxxx'
)

# Проверяемая строка
test_string = '12345'

# Проверяем размер совпадающей части в начале строки
result = dict()
for s in key_preffix:
    w = len_equ(s, test_string)
    result[s] = w

# print(result)

# Ищем максимальное значение сопадения
max_equ = max(result.values())
# print(max_equ)

# Какому образцу соответствует найденное максимальное значение?
found = "Ничего не найдено"
for key in result.keys():
    if result[key] == max_equ:
        found = key
        break

print("Образец максимального соответсвия: '{0}'".format(found))
</code>


модель не сходится на небольшом наборе данных
Недавно изучаю tensorflow, примеры которые описаны в книгах работают, но в них используются наборы дынных MNIST. Но если я ввожу свои данные микронабор, то модель  не сходится. Ранее я разработал свою сеть и она работала на небольших тестовых наборах не в библиотеке tensorflow. Пример такой подаем на вход массив например
[10,20,30,40], а на выход например
[0.1,0.4,0.5], то есть на вход
4 нейрона  на выход
3. Модель обучается, проверяем на вход подаем
[10,20,30,40] получаем
[0.1,0.4,0.5]. Но на практике модель не сходится, начинает обучение и затухает. Что не так с организацией сети и входными данными? Похоже на затухающие градиенты, но я не уверен. Как это можно исправить?

import tensorflow as tf
import numpy as np
from keras.models import Sequential
from keras.layers import Input, Dense, Activation
from sklearn import preprocessing
model=Sequential()
model.add(Dense(10,input_shape=(4,),activation="elu",init="uniform"))
model.add(Dense(10,activation="elu",init="uniform"))
model.add(Dense(3,activation="elu",init="uniform"))
model.compile(loss="categorical_crossentropy", optimizer="sgd", metrics=["accuracy"])
def data():
    X = np.array([[40, 80, 30, 60], [100, 40, 20, 80], [90, 190, 10, 15]])
    Y = np.array([[10, 20, 30], [10, 40, 60], [80, 90,100]])
    X=X/100
    Y=Y/100
        return X,Y
x_train,Y_train=data()
model.fit(x_train,Y_train,batch_size=3,epochs=300,
          verbose=1)
a=np.array([40, 80, 30, 60])/100;
predict_dataset = tf.convert_to_tensor(x_train,dtype=tf.float32)
reshy =a.reshape((1,- 1))
print("test")
print(reshy)
prediction = model.predict(reshy)
print('prediction')
print(prediction)
print('x_train')
print(x_train)
print('Y_train')
print(Y_tirain)
print("Привет")

Судя по тензору
Y у вас задача регрессии. Для задачи регрессии у вас неудачно выбрана функция активации на последнем выходном слое. Кроме того функция потери
loss="categorical_crossentropy" используется только для задач классификации.
Вот исправленная регрессионная модель:

X = np.array([[40, 80, 30, 60], [100, 40, 20, 80], [90, 190, 10, 15]])
Y = np.array([[10, 20, 30], [10, 40, 60], [80, 90,100]])

model = Sequential()
model.add(Dense(16, input_shape=(X.shape[1],)))
model.add(Activation('relu'))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(3))
model.compile(loss='mean_squared_error', optimizer='Adamax', metrics=['mae'])

model.fit(X, Y, epochs=500, verbose=1)

Вывод:

...
Epoch 498/500
3/3 [==============================] - 0s 669us/step - loss: 4.5900e-07 - mean_absolute_error: 5.2166e-04
Epoch 499/500
3/3 [==============================] - 0s 503us/step - loss: 4.2649e-07 - mean_absolute_error: 5.0259e-04
Epoch 500/500
3/3 [==============================] - 0s 334us/step - loss: 4.0100e-07 - mean_absolute_error: 4.8796e-04
Out[49]: <keras.callbacks.History at 0x1ec427eac88>

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


Оставить только фамилии и подставить их в теги
Есть фамилии и инициалы авторов:

authors = ['Пупкин М.И.', 'Скутина О.Л.']

Пытаюсь оставить только фамилии обоих авторов:

def get_ln(authors):
    for i in authors:
        a = i.split()[0]
    return '<SUBFIELD.A>' + str(a) + '</SUBFIELD.A>'

get_ln = get_ln(authors)

print(get_ln)

Но получается только фамилия второго автора. Подскажите, пожалуйста, как подставить в теги обе фамилии? Желаемый результат:

<SUBFIELD.A>Пупкин</SUBFIELD.A>
<SUBFIELD.A>Скутина</SUBFIELD.A>

Возвращается фамилия последнего автора, потому что в конце цикла в
a хранится только она, т.к. каждую итерацию переменная
а перезаписывается. Нужно в цикле сохранять фамилии в другой список, например.
Возвращает список, элементами которого являются нужные строки:

def get_ln(authors):
    names = [] # пустой список, куда будем складывать фамилии
    for i in authors:
        a = i.split()[0]
        # добавляем полученную фамилию в список вместе с тэгами
        names.append('<SUBFIELD.A>' + a + '</SUBFIELD.A>')
    return names

Результат:

['<SUBFIELD.A>Пупкин</SUBFIELD.A>', '<SUBFIELD.A>Скутина</SUBFIELD.A>']

PS. Обратите внимание на эту строчку:

get_ln = get_ln(authors)

Ни в коем случае, НИКОГДА!, не делайте так. После этой строчки нельзя будет использовать функцию
get_ln(), потому что
get_ln теперь не функция, а список фамилий. Не нужно давать переменным и функциям одинаковые имена.


Использование перевернутого стэка
Как я читал,стэк в питоне это лист(предполагаю что так-же и set'ы,и tuple'ы,исправьте если я не прав),который используют с последнего элемента.
Так вот,будет ли считаться стэком лист,который я переверну,и буду тогда использовать не с последнего элемента,а с первого, т.к перевернул его

Как я читал,стэк в питоне это лист(предполагаю что так-же и set'ы,и
  tuple'ы,исправьте если я не прав),который используют с последнего
  элемента.

Стэк в любом языке - это абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO. Что именно используется на более низком уровне абстракции для хранения данных - не важно, если этот контейнер способен обеспечивать упорядоченное добавление и удаление элементов. Что, кстати, исключает использование множеств (set) и кортежей (tuple), так как первые не обеспечивают упорядоченности, а вторые неизменяемы.

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

Смотря в какой момент произойдёт "переворачивание". Если добавление и удаление всегда будет проходить с одного конца, то неважно какой именно это конец. Верхушка стека - это тоже абстракция. А если добавлять с одного конца, а удалять с другого, то это нарушает принцип "последним пришёл — первым вышел" и превращает стэк в очередь.


обработка последнего присланного сообщения telegram
Хочу присваивать переменной текст, который присылает пользователь
<code>
@bot.message_handler(commands=['add'])
def handle_start(message):
    bot.send_message(message.chat.id, "Введите ссылку на товар", disable_notification=True)
    url = message.text
    constants.items.append(url)
</code>
Но проблема в том, что в переменную записывается команда /add, а не отправленный текст.. Как поступить в данном случае?

Есть такая функция
bot.register_next_step_handler(message, another_process)
В данном случае another_process это название функции в которой вы пишете что делать с отправленным текстом

def another_process(message):
    bot.send_message(message.chat.id, 'Ссылка на товар ' + message.text)

@bot.message_handler(commands=['add'])
def handle_start(message):
    message = bot.send_message(message.chat.id, "Введите ссылку на товар", disable_notification=True)
    url = message.text
    constants.items.append(url)
    bot.register_next_step_handler(message, another_process)


Получить максимальное значение глубины директории
Хочу узнать глубину директории
<code>
import os
src = r'C:\path'
for dir_name, dirs, files in os.walk(src):
    print(dir_name, len(dirs))
</code>
Получаю вывод по всем поддиректориям, с указанием глубины каждой из них. А как получить максимальный но один вывод по всем директориям.

max(len(dirs) for _, dirs, _ in os.walk(src))


ввод нескольких строк в одну переменную
Вот в чем проблема. Есть ли в Пайтоне способ вводить неограниченное количество строк через Enter в одну и ту же переменную кроме sys.stdin? В задании сказано сделать его[задание] с использованием всего одной строки, но для того, что бы вводить sys.stdin сначала нужно прописат import sys.stdin

В строку:

x = '\n'.join(i for i in iter(input, ''))

или в список:

x = [i for i in iter(input, '')]


Каким образом с помощью Python распарсить иерархию?
Есть список вот такого типа, в котором иерархия задана открывающим и закрывающим символом (s - открывающий, e - закрывающий):
<code>
[ ["s", "n1"], ["s", "n2"], ["s", "n3"], ["e", "n3"], ["e", "n2"], ["s", "n4"], ["e", "n4"], ["e", "n1"]
</code>
Необходимо распарсить его так, чтобы для каждого n_ получить имя его родителя.
По идее так же делается например и в парсинге XML, но чего то до меня пока не доходит как это сделать. Спасибо за помощь заранее.

Можно попробовать преобразовать этот список в JSON и потом создать из него уже словарик с помощью библиотеки json. Пример такого кода:
<code>
import json

s = [ ["s", "n1"], ["s", "n2"], ["s", "n3"], ["e", "n3"], ["e", "n2"], ["s", "n4"], ["e", "n4"], ["e", "n1"] ]

result = "{"

for item in s:
    if item[0] == "s":
        result += ("\"%s\": {" % item[1])
    if item[0] == "e":
        result += "},"

result += "}"
result = result.replace(",}", "}")

d = json.loads(result)
print(d)
print(d["n1"])
print(d["n1"]["n2"])
</code>


Django Annotate, сумма временных интервалов
Имеются две модели:

class JournalEntryQuerySet(models.QuerySet):
    def total_flight_time_per_day(self):
        return self.annotate(total_flight_time_per_day=Epoch(Sum('elements__flight_time')))

class JournalEntryManager(models.Manager):
    def get_queryset(self):
        return JournalEntryQuerySet(self.model, using=self._db)

    def total_flight_time_per_day(self):
        return self.get_queryset().total_flight_time_per_day()

class JournalEntry(models.Model):
    date = models.DateField()
    unit = models.ForeignKey(Unit, on_delete=models.PROTECT)

    objects = JournalEntryManager()

class JournalEntryElementManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().annotate(duration=Epoch(F('flight_time')))

class JournalEntryElement(models.Model):
    journal_entry = models.ForeignKey(
        JournalEntry,
        on_delete=models.PROTECT,
        related_name='elements',
)
    flight_time = models.DurationField()

    objects = JournalEntryElementManager()

Пытаюсь по аналогии с total_flight_time_per_day реализовать анотацию для модели JournalEntry с подсчётом кумулятивной суммы для временных интервалов от начала года до даты которая хранится в объекте модели.
Получилось сделать с помощью метода в сериализаторе модели, но таким образом получается много запросов к БД соответствующее количеству экземпляров которые требуется анотировать.
 К сожалению не очень хорошо разбираюсь в window function, нужна помощь. Может быть есть возможность сделать это с помощью подзапросов (SubQuery)?.
EDIT
В виде sql это выглядит примерно так:

SELECT journalentry.id,
       journalentry.date,

       COALESCE(EXTRACT('epoch' from SUM(journalentryelement.flight_time)), 0) AS total_flight_time_per_day,

       (SELECT COALESCE(EXTRACT('epoch' from SUM(U1.flight_time)), 0) AS total_flight_time_per_year
        FROM journalentry U0
                    LEFT OUTER JOIN journalentryelement U1
                                    ON (U0."id" = U1.journal_entry_id)
        WHERE U0.date BETWEEN '2019-01-01'::date AND journalentry.date)

FROM journalentry
            LEFT OUTER JOIN journalentryelement
                            ON (journalentry.id = journalentryelement.journal_entry_id)
GROUP BY journalentry.id;

Можно ли средствами orm сделать вложенный запрос который возвращает total_flight_time_per_year?

В итоге получилось таким образом:
<code>
class JournalEntryManager(models.Manager):
    def total_time_per_period(self):
        return self.get_queryset().annotate(
            total_time_per_day=Coalesce(Epoch(Window(expression=Sum('elements__flight_time'), partition_by=['date'])),  Value(0)),
            total_time_per_year=Coalesce(Epoch(Window(expression=Sum('elements__flight_time'), order_by=F('date').asc())), Value(0))
        ).order_by('date').distinct('date')
</code>
Для подсчёта налета за день указываем partition_by. Если не указывать партицию, то партицией является весь запрос.
С подсчётом суммарного налёта есть нюанс если не задан order_by в окне, идет подсчет по всей партиции один раз, и результат пишется во все строки (одинаков для всех строк партиции). Если же order_by задан, то подсчет в каждой строке идет от начала партиции до этой строки.


Проблема с перезагрузкой программы на Python(Tkinter)
Создал программу на Tkinter, которая должна рассчитывать коммунальные услуги.
Программа работает но категорически отказывается перезагружаться, выдавая такую ошибку:

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\Artur\Soft\Python 3.7.1\lib\tkinter\__init__.py", line 1705, in
__call__
    return self.func(*args)
  File "F:\Python Middle\Экзамен.py", line 18, in start
    if not eleent1.get() or not eleent2.get() or not vodent1.get() or not
vodent2.get() or not gazent1.get() or not gazent2.get():
AttributeError: 'float' object has no attribute 'get'

Долго гуглил эту проблему но ответ нашел только на англоязычном форуме, но даже с переводчиком ничего не понял.
Сам код:

#Python 3.6.1
from math import *
from tkinter import *
from tkinter import messagebox

#window setings
window  = Tk()
#window name
window.title('Комуналка')
#window size
window.minsize(750, 600)
window.resizable(True, True)

def start():
    global eleent1, eleent2, vodent1, vodent2, gazent1, gazent2
    if not eleent1.get() or not eleent2.get() or not vodent1.get() or not
vodent2.get() or not gazent1.get() or not gazent2.get():
        #Окно предупреждения
         messagebox.showwarning('Ошибка', 'Заполните все поля')
    else:
        #исключение написания слов
        str1 = "0123456789"
        if eleent1.get()[0] not in str1:
            #Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")
        elif eleent2.get()[0] not in str1:
            #Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")
        elif vodent1.get()[0] not in str1:
            #Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")
        elif vodent2.get()[0] not in str1:
            #Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")
        elif gazent1.get()[0] not in str1:
            #Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")
        elif gazent2.get()[0] not in str1:
            #Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")

        else:

            #Вывод значение
            eleent1= eleent1.get()
            eleent2= eleent2.get()
            vodent1= vodent1.get()
            vodent2= vodent2.get()
            gazent1= gazent1.get()
            gazent2= gazent2.get()

            eleent1= float(eleent1)
            eleent2= float(eleent2)
            vodent1= float(vodent1)
            vodent2= float(vodent2)
            gazent1= float(gazent1)
            gazent2= float(gazent2)
            #Расчет
            raznele= eleent2 - eleent1
            raznvod= vodent2 - vodent1
            razngaz= gazent2 - gazent1

            if raznele <= 90:
                grnele= float(raznele * 0.9)

            else:
                grnele= float(raznele * 1.68)

            grnvod= raznvod * 7
            grngaz= razngaz * 6.9579
            allsumma = grnele + grnvod + grngaz

            #Округление чисел(Дря коректного отображения)
            grnele = round(grnele, 2)
            grnvod = round(grnvod, 2)
            grngaz = round(grngaz, 2)
            allsumma = round(allsumma, 2)

            grnele=str(grnele)

    grnvod=str(grnvod)
            grngaz=str(grngaz)
            allsumma=str(allsumma)

            rezultele.config(text = grnele)
            rezultvod.config(text = grnvod)
            rezultgaz.config(text = grngaz)
            summa.config(text = allsumma)

#Объясняем
label1 = Label(text="Предыдущие значения", fg="#eee", bg="#333")
label1.grid(row=0, column=1, padx=10)

label1 = Label(text="Новые значения", fg="#eee", bg="#333")
label1.grid(row=0, column=2, padx=10)

#Расчет электричества
label1 = Label(text="Электричество(кВт)", fg="#eee", bg="#333")
label1.grid(row=1, column=0, padx=10)

eleent1 = Entry(window, font = 'Arial 20', bg = 'white', fg = 'navy', bd = 5, width = 10)
eleent1.grid(row=1, column=1, padx=10)
eleent2 = Entry(window, font = 'Arial 20', bg = 'white', fg = 'navy', bd = 5, width = 10)
eleent2.grid(row=1, column=2, padx=10)

rezultele = Label(text="Сумма:", font = 'Arial 20', bg = 'white', fg = 'navy', bd = 5, width = 10)
rezultele.grid(row=1, column=3, padx=10)
#Расчет воды
label1 = Label(text="Вода(м³)", fg="#eee", bg="#333")
label1.grid(row=2, column=0, padx=10)

vodent1 = Entry(window, font = 'Arial 20', bg = 'white', fg = 'navy', bd = 5, width = 10)
vodent1.grid(row=2, column=1, padx=10)
vodent2 = Entry(window, font = 'Arial 20', bg = 'white', fg = 'navy', bd = 5, width = 10)
vodent2.grid(row=2, column=2, padx=10)

rezultvod = Label(text="Сумма:", font = 'Arial 20', bg = 'white', fg = 'navy', bd = 5, width = 10)
rezultvod.grid(row=2, column=3, padx=10)
#Расчет газа
label1 = Label(text="Газ(м³)", fg="#eee", bg="#333")
label1.grid(row=3, column=0, padx=10)

gazent1 = Entry(window, font = 'Arial 20', bg = 'white', fg = 'navy', bd = 5, width = 10)
gazent1.grid(row=3, column=1, padx=10)
gazent2 = Entry(window, font = 'Arial 20', bg = 'white', fg = 'navy', bd = 5, width = 10)
gazent2.grid(row=3, column=2, padx=10)

rezultgaz = Label(text="Сумма:", font = 'Arial 20', bg = 'white', fg = 'navy', bd = 5, width = 10)
rezultgaz.grid(row=3, column=3, padx=10)

#Button
button = Button(window, text = 'Считать', width=10, height=2, command = start)
button.grid(row=4, column=1, padx=10)
#Сумма
summa = Label(text="Сумма:", font = 'Arial 20', bg = 'white', fg = 'navy', bd = 5, width = 10)
summa.grid(row=4, column=2, padx=10)

window.mainloop()

У вас переменные виджетов заменяются значениями которые вы расчитываете и после повторного нажатия на кнопку вы опять вызываете функцию переменной виджета, а у вас уже там значение чисел
float после чего у вас и вылетаешь ошибка

# Python 3.6.1
from math import *
from tkinter import *
from tkinter import messagebox

# window setings
window = Tk()
# window name
window.title('Комуналка')
# window size
window.minsize(750, 600)
window.resizable(True, True)

def start():
    if not eleent1.get() or not eleent2.get() or not vodent1.get() or not vodent2.get() or not gazent1.get() or not gazent2.get():
        # Окно предупреждения
        messagebox.showwarning('Ошибка', 'Заполните все поля')
    else:
        # исключение написания слов
        str1 = "0123456789"
        if eleent1.get()[0] not in str1:
            # Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")
        elif eleent2.get()[0] not in str1:
            # Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")
        elif vodent1.get()[0] not in str1:
            # Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")
        elif vodent2.get()[0] not in str1:
            # Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")
        elif gazent1.get()[0] not in str1:
            # Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")
        elif gazent2.get()[0] not in str1:
            # Сообщение об ошибке
            messagebox.showerror("Error!", "Вводите ТОЛЬКО числа!!!")

        else:

            # Вывод значение
            eleent_1 = eleent1.get()
            eleent_2 = eleent2.get()
            vodent_1 = vodent1.get()
            vodent_2 = vodent2.get()
            gazent_1 = gazent1.get()
            gazent_2 = gazent2.get()

            eleent_1 = float(eleent_1)
            eleent_2 = float(eleent_2)
            vodent_1 = float(vodent_1)
            vodent_2 = float(vodent_2)
            gazent_1 = float(gazent_1)
            gazent_2 = float(gazent_2)
            # Расчет
            raznele = eleent_2 - eleent_1
            raznvod = vodent_2 - vodent_1
            razngaz = gazent_2 - gazent_1

            if raznele <= 90:
                grnele = float(raznele * 0.9)

            else:
                grnele = float(raznele * 1.68)

            grnvod = raznvod * 7
            grngaz = razngaz * 6.9579
            allsumma = grnele + grnvod + grngaz

            # Округление чисел(Дря коректного отображения)
            grnele = round(grnele, 2)
            grnvod = round(grnvod, 2)
            grngaz = round(grngaz, 2)
            allsumma = round(allsumma, 2)

            grnele = str(grnele)

            grnvod = str(grnvod)
            grngaz = str(grngaz)
            allsumma = str(allsumma)

            rezultele.config(text=grnele)
            rezultvod.config(text=grnvod)
            rezultgaz.config(text=grngaz)
            summa.config(text=allsumma)

label1 = Label(text="Предыдущие значения", fg="#eee", bg="#333")
label1.grid(row=0, column=1, padx=10)

label1 = Label(text="Новые значения", fg="#eee", bg="#333")
label1.grid(row=0, column=2, padx=10)

# Расчет электричества
label1 = Label(text="Электричество(кВт)", fg="#eee", bg="#333")
label1.grid(row=1, column=0, padx=10)

eleent1 = Entry(window, font='Arial 20', bg='white', fg='navy', bd=5, width=10)
eleent1.grid(row=1, column=1, padx=10)
eleent2 = Entry(window, font='Arial 20', bg='white', fg='navy', bd=5, width=10)
eleent2.grid(row=1, column=2, padx=10)

rezultele = Label(text="Сумма:", font='Arial 20', bg='white', fg='navy', bd=5, width=10)
rezultele.grid(row=1, column=3, padx=10)
# Расчет воды
label1 = Label(text="Вода(м³)", fg="#eee", bg="#333")
label1.grid(row=2, column=0, padx=10)

vodent1 = Entry(window, font='Arial 20', bg='white', fg='navy', bd=5, width=10)
vodent1.grid(row=2, column=1, padx=10)
vodent2 = Entry(window, font='Arial 20', bg='white', fg='navy', bd=5, width=10)
vodent2.grid(row=2, column=2, padx=10)

rezultvod = Label(text="Сумма:", font='Arial 20', bg='white', fg='navy', bd=5, width=10)
rezultvod.grid(row=2, column=3, padx=10)
# Расчет газа
label1 = Label(text="Газ(м³)", fg="#eee", bg="#333")
label1.grid(row=3, column=0, padx=10)

gazent1 = Entry(window, font='Arial 20', bg='white', fg='navy', bd=5, width=10)
gazent1.grid(row=3, column=1, padx=10)
gazent2 = Entry(window, font='Arial 20', bg='white', fg='navy', bd=5, width=10)
gazent2.grid(row=3, column=2, padx=10)

rezultgaz = Label(text="Сумма:", font='Arial 20', bg='white', fg='navy', bd=5, width=10)
rezultgaz.grid(row=3, column=3, padx=10)

# Button
button = Button(window, text='Считать', width=10, height=2, command=start)
button.grid(row=4, column=1, padx=10)
# Сумма
summa = Label(text="Сумма:", font='Arial 20', bg='white', fg='navy', bd=5, width=10)
summa.grid(row=4, column=2, padx=10)

window.mainloop()


Глюк с вводом данных от пользователя [дубликат]

На этот вопрос уже даны ответы здесь:

Неправильно работает сравнение переменной с несколькими значениями через or

                                (3 ответа)

Закрыт 1 год назад.

У меня есть код, который генерирует случайные математические примеры. Программа спрашивает у пользователя, какой он хочет знак в примере
(+, -, /, *). И дальше условие на то, написал ли он вообще матем. оператор, а не какой-либо
"йсмйСЙ234ВЙ2Ф". Я тестировал, и заметил: когда я пишу именно матем. оператор, он из проверки выводит, будто я ввёл не то, что прописано в условии. Вот ОТРЫВОК кода:

want = input("Выберите знак действия для вашего примера (+, -, /, *): ")
    if want != "+" or "-" or "/" or "*":
        print("!!! | Вы должны ввести ЗНАК действия!")
    else:

Попробуйте так:
<code>
if want not in ["+","-", "/","*"]:
    print("!!! | Вы должны ввести ЗНАК действия!")
</code>


Парсинг HTML страницы. Unicode в UTF-8 [закрыт]

Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

 Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

Закрыт 4 года назад.

Это сообщение было исправлено и отправлено на проверку 1 год назад, но повторное открытие сообщения провалилось:

Исходные причины закрытия не были исправлены

                        Улучшить вопрос

При парсинге страницы с помощью requests весь текст имеет следующий вид: \u0426\u0435\u043d\u0442\u0440
Пробовал использовать функцию decode('utf-8'), не помогло
Что нужно использовать, чтобы преобразовать данную строку в обычный текст?

Попробуйте  так:
<code>
"\u0426\u0435\u043d\u0442\u0440".decode("unicode-escape")
</code>


Ошибка UnicodeEncodeError django python3
При загрузке файла на сервер возникает ошибка.
<code>
UnicodeDecodeError at /api/structure/ 'ascii' codec can't decode byte 0xd0 in position 10: ordinal not in range(128)
Traceback:

File "/home/hl/www/hls/api/project/env/lib/python3.6/site-
packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/home/hl/www/hls/api/project/env/lib/python3.6/site-
packages/django/core/handlers/base.py" in _get_response
  126.                 response =
self.process_exception_by_middleware(e, request)

File "/home/hl/www/hls/api/project/env/lib/python3.6/site-
packages/django/core/handlers/base.py" in _get_response
  124.                 response = wrapped_callback(request,
*callback_args, **callback_kwargs)

File "/home/hl/www/hls/api/project/env/lib/python3.6/site-
packages/django/views/decorators/csrf.py" in wrapped_view
  54.         return view_func(*args, **kwargs)

File "/home/hl/www/hls/api/project/env/lib/python3.6/site-
packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/home/hl/www/hls/api/project/env/lib/python3.6/site-
packages/rest_framework/views.py" in dispatch
  495.             response = self.handle_exception(exc)

File "/home/hl/www/hls/api/project/env/lib/python3.6/site-
packages/rest_framework/views.py" in handle_exception
  455.             self.raise_uncaught_exception(exc)

File "/home/hl/www/hls/api/project/env/lib/python3.6/site-
packages/rest_framework/views.py" in dispatch
  492.             response = handler(request, *args, **kwargs)

File "/home/hl/www/hls/api/project/structure/views.py" in post
  53.             config = openFile('/home/hl/www/hls/api/project/media/structure/upload/%s/config.conf' % (path_extr))

File "/home/hl/www/hls/api/project/structure/func.py" in openFile
  12.     return open(path, 'r').read()

File "/home/hl/www/hls/api/project/env/lib/python3.6/encodings/ascii.py" in decode
  26.         return codecs.ascii_decode(input, self.errors)[0]
</code>
Подскажите в чём может быть проблема, использую связку apache2 + mod_wsgi + virtualenv.
Когда запускаю на севере django(python3 manage.py runserver) всё хорошо работает.

В строке
return open(path, 'r').read() файла func.py нужно указать кодировку файла config.conf


Запись результата в CSV файл на Python
Нужно было написать программу, которая генерирует граф с случайной связностью и представить его в виде списков смежности и сохраняет эти списки в формате CSV.
Вывод списков через print() я сделал, расскажите, пожалуйста, как вывести результаты в CSV файл, чтобы в каждой отдельной строке был список смежности для определённой вершины.
<code>
import random
n = 5
matrix = [[random.randint(0, 1) for i in range(n)] for j in range(n)]
for i in range(n):
    matrix[i][i] = 0
for i in range(n):
    for j in range(n):
        matrix[j][i] = matrix[i][j]
print(matrix)
for i in range(n):
    print('Вершина', i+1, 'имеет связь с вершинами: ', end='')
    for j in range(n):
        if j == n-1 and matrix[i][j] != 0:
            print(j+1)
            continue
        elif j == n-1 and matrix[i][j] == 0:
            print()
        if matrix[i][j] != 0:
            print(j+1, end=' ')
</code>
В результате выполнения программы для матрицы 5x5 программа выводит следующие данные:
Вершина 1 имеет связь с вершинами: 2 3 4 5
Вершина 2 имеет связь с вершинами: 1 3 4
Вершина 3 имеет связь с вершинами: 1 2
Вершина 4 имеет связь с вершинами: 1 2 5
Вершина 5 имеет связь с вершинами: 1 4

Попробуйте:
<code>
import random
n = 5
matrix = [[random.randint(0, 1) for i in range(n)] for j in range(n)]
for i in range(n):
    matrix[i][i] = 0
for i in range(n):
    for j in range(n):
        matrix[j][i] = matrix[i][j]
print(matrix)

with open('output.csv', 'w') as g:
    for i in range(n):
        print('{},'.format(i+1), end='', file=g)
        for j in range(n):
            if j == n-1 and matrix[i][j] != 0:
                print('{},'.format(j+1), file=g)
                continue
            elif j == n-1 and matrix[i][j] == 0:
                print("", file=g)
            if matrix[i][j] != 0:
                print('{},'.format(j+1), end='', file=g)
</code>


Передвижение спрайта в pygame
Я делаю простую программу, которая на нажатие стрелок будет перемещать картинку. Мне нужно,что бы спрайт двигался во время того, как зажата стрелка. Проблема в том, что сейчас если я нажимаю на стрелку спрайт движется один раз, и не реагирует на зажатие клавиши. Буду благодарен за помощь.
<code>
import pygame
import os

def load_image(name, colorkey=None):
    fullname = os.path.join('data', name)
    try:
        image = pygame.image.load(fullname)
    except pygame.error as message:
        print('Cannot load image:', name)
        raise SystemExit(message)

    image = image.convert_alpha()
    if colorkey is not None:
        if colorkey is -1:
            colorkey = image.get_at((0, 0))
        image.set_colorkey(colorkey)
    return image

pygame.init()
size = width, height = 501, 501
screen = pygame.display.set_mode(size)
all_sprites = pygame.sprite.Group()

hero_image = load_image("bomb.png")

hero = pygame.sprite.Sprite(all_sprites)
hero.image = hero_image
hero.rect = hero.image.get_rect()
all_sprites.add(hero)

running = True
while running:
    for event in pygame.event.get():
        # при закрытии окна
        if event.type == pygame.QUIT:
            running = False
        key = pygame.key.get_pressed()
        if event.type == pygame.KEYUP:
            f = event.key
            if event.key == 273:
                hero.rect.top -= 10
            if event.key == 274:
                hero.rect.top += 10
            if event.key == 275:
                hero.rect.left += 10
            if event.key == 276:
                hero.rect.left -= 10
    screen.fill((0, 0, 78))
    all_sprites.draw(screen)
    pygame.display.flip()
pygame.quit()
</code>

Чтобы двигать объект всё время, пока нажата стрелка, надо создать 4 переменные, под названиями "left, up, right, down" и присвоить каждой из них значение false. Потом в цикле
for event in pygame.event.get() проверять:

if event.type == pygame.KEYDOWN:
    if event.key == K_UP:
        up = true
    if event.key == K_DOWN:
        down = true
    if event.key == K_RIGHT:
        right = true
    if event.key == K_LEFT:
        left = true

if event.type == pygame.KEYUP:
    if event.key == pygame.K_UP:
        up = false
    if event.key == pygame.K_DOWN:
        down = false
    if event.key == pygame.K_RIGHT:
        right = false
    if event.key == pygame.K_LEFT:
        left = false

Затем в цикле
while running проверять значения переменных "left, up, right, down", если у них значение true, то двигать объект hero в определённом направлении.


Не сохраняет таблицу

now_date = str(datetime.datetime.now())
system = os.path.dirname(os.path.abspath(__file__))
new_now_date = system + '\\' + now_date.replace(' ', '-') + '.xlsx'
save_workbook(excel, new_now_date)

Есть таблица с названием "excel". Пытаюсь её сохранить, вылетает ошибка.

OSError: [Errno 22] Invalid argument: 'C:\\Users\\Professional\\Desktop\\Парсер hh.ru\\2019-02-08-22:14:26.562539.xlsx'

Потому что
: запрошенный знак в итоговом имени
2019-02-08-22:14:26.562539.xlsx.
Замените двоеточие например на точку:

new_now_date = system + '\\' + now_date.replace(' ', '-').replace(':', '.') + '.xlsx'

Примечание:
Красивее и безопаснее использовать
os.path тоже для соединения пути и имя файла:

new_now_date = os.path.join(system, now_date.replace(' ', '-').replace(':', '.') + '.xlsx')


передача аргументов в multiprocessing.Pool
Есть код:

import multiprocessing
from itertools import product
import time

username = 'ivan'

my_items = [1,2,3,4,5,6,7,8,9]

def printing(username,my_items):
    print (username)
    print(my_items)

if __name__ == '__main__':
    with multiprocessing.Pool(processes=4) as pool:
        results = pool.starmap(printing, product(username, my_items))

по задумке, код должен для каждого итема в my_items выполнить функцию printing() с одним и тем же аргументом username, и сделать это одновременно в 4 процесса.
То есть по моей задумке результат должен выглядеть так:

ivan
1
ivan
2
ivan
3
ivan
4
ivan
5
ivan
6
ivan
7
ivan
8
ivan
9

а по факту код выдает результат:

i
1
i
2
i
3
i
4
i
5
i
etc...

и видимо по очереди, друг за другом. Что я делаю не так?

results = pool.starmap(printing, product([username], my_items))


не определена переменная Python
<code>
import os
os.path.isdir('C:\ProgramData\Pk')
if True:
    pass
else:
    newpath = r'C:\ProgramData\Pk'# здесь ошибка
if not os.path.exists ( newpath ):
    os.makedirs ( newpath )
</code>
пишет что не определена переменная в чем ошибся и как исправить?

Блок
else по очевидным причинам никогда не будет выполнен, а потому переменная
newpath не будет объявлена и инициализирована.


Как из строки брать по 2 символа
К примеру у меня есть переменная со строкой

a = "Hello World"

и мне надо что бы выводило

he
ll
o
wo
rl
d

for i in range(0, len(a), 2):
    print(a[i:i+2])

или так

from itertools import zip_longest

print('\n'.join(''.join(i) for i in zip_longest(*([iter(a)] * 2), fillvalue='')))


Can't assign to function call
У меня есть список all_users, в который я помещаю словари
person{'user_id': user_id, 'state': state}. Почему в дальнейшем я не могу переприсвоить значение по ключу 'state'? Я неправильно беру значение по ключу?
<code>
          for g in all_users:
                if g.get('user_id') == event.user_id:
                    g.get('state') = state_list[2]
</code>
Почему строка g.get('state') подсвечивается красным и почему это функцию нельзя вызвать(Can't assign to function call)?

get() - это метод для получения значения из словаря.

почему это функцию нельзя вызвать(Can't assign to function call)?

Функцию вызвать можно. Проблема в том, что вы вызову функции пытаетесь присвоить значение, так делать уже нельзя.
Для присвоения значения:

g['state'] = state_list[2]


Движения символа в конец строки
Столкнулся с задачей на кодеваре и вроде бы решил, если бы не одно но! Сама задача проста до безумия, нужна в списке все, что является  0(ноль) отправить в конец строки.
так работает

def move_zeros(array):
    for i in array:
        array.append(array.pop(array.index(0)))
        if array.index != 0:
            continue
    print(array)
# [9, -10, {}, True, 1, 2, 'a', 1, 1, [], None, 3, 'z', 1, 0, 0, 0, 0, 0, 0, 0]

Но до тех пор, пока в данные не подсунуть False

if array.index != 0 and array.index is False:

все равно получаю, что то типа

[9, -10, {}, True, 1, 2, 'a', 1, 1, [], None, 3, 'z', 1, 0, 0, 0, False, 0, 0, 0, 0]

from math import isclose

l = [.0, .001, -.0, 9, -10, {}, True, 1, 2, 'a', 1, 1, [], None, 3, 'z', 1, 0, 0, 0, False, 0, 0, 0, 0]

def iszero(val):
    return val is 0 or (isinstance(val, float) and isclose(val, 0))

# подсчет количества нулей
zeros_cnt = sum(map(iszero, l))

# фильтрация списка от нулей:
l = [i for i in l if not iszero(i)]

# вставка нулей в конец списка
l += [0] * zeros_cnt


Отношения входного текста к каждой из категорий в предсказании нейронной сети с predict()
Используя следующую строку:

loaded_model.predict(tokenize_text)

получаю предсказание нейронной сети такого вида:

[[1.4275383e-02 5.4952472e-01 4.3477431e-01 4.6290222e-04 7.9817160e-05
  7.9108047e-04 9.1869697e-05]]

Что это такое? Это вероятность отношения входного текста к каждой из категории или это что-то другое?
Как дальше работать с таким ответом?

PS Использую
categorical_crossentropy классификацию.


Для чего нужны конструкторы класса в Python?
Я не могу понять для чего нужны конструкторы класса (init и т.д.)
Я понял что они нужны для создания объекта, но я не могу понять как его применять и когда он нужен...
Я умею писать только процедурные программы ..

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


Ошибка при перекодировке из 1251 в UTF8
мне нужно перекодировать файл из Windows-1251 в UTF-8, во время перекодировки получаю ошибку
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 0: invalid start byte и в точности такую же ошибку получаю при при переводе строки в 1251 и обратно в UTF-8, как это можно исправить, почему не желает перекодировать

x='Байты'.encode('utf8')
print(x)
x='Байты'.encode('windows-1251')
print(x)
x=x.decode()
print(x)

вывод

b'\xd0\x91\xd0\xb0\xd0\xb9\xd1\x82\xd1\x8b'
b'\xc1\xe0\xe9\xf2\xfb
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 0: invalid start byte

DrawnRaccoon вам правильно написал, что метод
decode по умолчанию использует кодировку UTF-8, а в переменной
x на момент вызова хранятся байты в кодировке cp1251. Это несоответствие фактической и ожидаемой кодировки и приводит к ошибке.

x = 'Байты'.encode('utf8')
print(x)  # В переменной x хранятся байты в кодировке utf-8

x = 'Байты'.encode('windows-1251')
print(x)  # В переменной x хранятся байты в кодировке сp1251

x = x.decode('windows-1251')
print(x)


Как в KivyMD обратиться к id в kv файле
Хочу изменить text переменной с id MainLabalId через py файл, но не знаю как до неё добраться
app.py

class MainApp(App):
theme_cls = ThemeManager()
title = "Application"

def build(self):
    main_widget = Builder.load_file(
        os.path.join(os.path.dirname(__file__), "./app.kv")
    )
    #self.theme_cls.theme_style = 'Dark'

    main_widget.ids.text_field_error.bind(
        on_text_validate=self.set_error_message,
        on_focus=self.set_error_message)
    self.bottom_navigation_remove_mobile(main_widget)
    return main_widget
...
def lol(self, *args):
    self. ??? .text = 'After'
...

app.kv

NavigationLayout:
id: nav_layout
...
Screen:
            id: scr_videocard
            name: 'Videocard'
            MDLabel:
                id: MainLabalId
                font_style: 'Body1'
                theme_text_color: 'Primary'
                text: "This is the Videocard page!" #то что хочу изменить
                size_hint_x:None
                width: '250dp'
                halign: "center"
                pos_hint: {"center_x": 0.50, "center_y": 0.75}
            MDFlatButton:
                text: 'Lol Kek'
                size_hint:    None, None
                size:        dp(50), dp(50)
                pos_hint:    {'center_x': 0.5, 'center_y': 0.5}
                on_press: app.lol()
...

Спустя 4 часа поиска нашел что надо делать так:
<code>
def lol(self, *args):
    self.root.ids.MainLabalId.text = 'After'
</code>


Как вытянуть данные из списка python?
Здраствуйте, пишу бота для Skype за основу взял библиотеку SkPy, но столкнулся с проблемой. Функция
getMsgs возвращает такие данные

[SkypeTextMsg(id=u'1549300682719', type=u'RichText', time=datetime.datetime(2019, 2, 4, 17, 18, 2, 703000), clientId=u'16593484836808786853', userId=u'live:m_tech_4', chatId=u'19:[email protected]', content=u'ds')

как мне можно вытянуть, скажем вот ету часть
time=datetime.datetime(2019, 2, 4, 17, 18, 2, 703000) что бы числа остались int

Допустим список с сообщениями называется
messages. Тогда для получения времени первого сообщения попробуйте сделать:

msg_time = messages[0].time
print(msg_time)


Проблема запуска .sh в cron
У меня есть работающий скрипт script.sh:

python /opt/facenet/src/train.py

Но когда я пытаюсь запустить его в cron, то получаю такую ошибку:

ImportError: No module named tensorflow

Я пыталась пофиксить это таким способом:

import tensorflow
tensorflow.__file__
/home/user/anaconda3/lib/site-packages/tensorflow/__init__.pyc

Я изменила путь к библиотекам и запустила скрипт вот так:

/home/user/anaconda3/lib/site-packages /opt/facenet/src/train.py

После чего, получила следующую ошибку:

/home/user/anaconda3/lib/site-packages: Permission denied

Эту пыталась починить с помощью chmod, однако тоже не помогло.
Мне было предложено запустить скрипт таким образом: ```

/home/user/anaconda3/bin/python /opt/facenet/src/train.py

Но вновь я получаю ошибку:

ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory

Есть идеи, в чем может быть дело?

Я видел похожие проблемы при работе с
VirtualEnv. В этом случае удобно будет создать небольшой файл, в котором утсанавливаются все переменные окружения, например:
Предположим вы создали Python VirtualEnv и назвали его
ml (Machine Learning).
Для работы в скриптах можно создать файл окружения (назовем его: $HOME/.ml_env):

export PYTHONPATH=/path/to/my/own/python_libs
export LD_LIBRARY_PATH=$HOME/anaconda3/lib:$LD_LIBRARY_PATH
export PATH=$HOME/anaconda3/bin:$PATH:$HOME/bin

Потом в SHELL скриптах добавляем след. строки:

#!/bin/bash

source $HOME/.ml_env
conda activate ml


Добавление данных по определенным индексам в dataframe
Имеется DataFrame, в котором один столбец состоит из
NaN. Пример:

0   UAA 280 NaN
2   UAA 280 NaN
5   UAA 919 NaN
7   UAA 919 NaN
11  UAA 919 NaN
16  UAA 919 NaN
17  UAA 371 NaN

Есть список индексов строк, в которые в последний столбец надо добавить определенное число< например, это число 2.0 и список индексов [2, 11, 17]. Надо, чтобы на выходе было нечто такое:

0   UAA 280 NaN
2   UAA 280 2.0
5   UAA 919 NaN
7   UAA 919 NaN
11  UAA 919 2.0
16  UAA 919 NaN
17  UAA 371 2.0

Большое спасибо за все ответы!

Для этого используется "accessor" DataFrame.loc[]:
<code>
In [33]: df.loc[[2, 11, 17], 'C'] = 2.0

In [34]: df
Out[34]:
      A    B    C
0   UAA  280  NaN
2   UAA  280  2.0
5   UAA  919  NaN
7   UAA  919  NaN
11  UAA  919  2.0
16  UAA  919  NaN
17  UAA  371  2.0
</code>


Создать пустой файл
Как создать пустой файл в Python? Если файл уже существует, сделать его пустым.
Понимаю, что можно с помощью
<code>
open(file, "w").close()
</code>
, но выглядит это не очень читаемо. Зачем для создания открывать и закрывать сразу? Есть какие-нибудь другие варианты?

По аналогии с утилитой
touch:

from pathlib import Path

Path('/tmp/file').touch()


Python pandas. Взять данные из определенных столбцов и посчитать
Всем привет. Продолжаю изучение pandas и столкнулся со следующей проблемой:
У меня есть файл csv в котором есть n кол - во столбцов (ну и значения в этих столбцах). Есть столбец(признак) race - в нём указана национальность человека.
есть столбец sex - в нём указан пол (Male - мужчина; Female - женщина) и есть столбец age - возраст.
Задача следующая: получить максимальный возраст мужчин расы Amer-Indian-Eskimo.
Просто получить максимальный возраст и мужчин и женщин не проблема :
<code>
print(df[df['race'] == 'Amer-Indian-Eskimo'] ['age'].max())
</code>
Вообщем не могу посчитать максимальный возраст именно мужчин. Не понимаю как указать в коде что нужно учитывать значение Male из столбца sex

Так вроде сам разобрался.
<code>
print(df[(df['race'] == 'Amer-Indian-Eskimo') & (df['sex'] == 'Male')]['age'].max())
</code>
Поправьте если я ошибаюсь.


Обработка условий в шаблоне после передачи данных через request.GET.get. Django
Только начинаю изучать Django.Хочу, чтобы шаблон проверял положительное число или отрицательное. Соответственно есть такой код:

`{% if n > 0 %}
<p>Число n положительное</p>
{% else %}
<p>Число n отрицательное</p>
{% endif %}
<p>n = {{ n }}</p>`

Если я в функции обработчике заранее задаю переменную, то всё ок. Но если я хочу чтобы он считаывал с Get-запроса эту переменную, то условие не работает.`

def index(request):
    n = request.GET.get("n","")
    header = "Personal Data"
    langs = ["English", "German", "Spanish"]
    user ={"name" : "Tom", "age" : 23}
    addr = ("Абрикосовая", 23, 45)
    data = {"header": header, "langs": langs, "user": user, "address": addr, "n" : n}
    return render(request, "firstapp/home.html", context=data)`

В итоге переменную считывает, выводит, но условие не проходит и пишет, что отрицательное. Что не так ?

def index(request):
    n = request.GET.get('n', '')
    if not n.isnumeric():
        return HttpResponseBadRequest('Параметр n должен быть числом')
    ...
    data = {..., 'n': int(n)}
    return render(request, 'firstapp/home.html', context=data)


Как правильно вызвать процесс из python?
В общем, написал простой конвертер систем счисления. Хочу его автоматически протестировать скриптом. Использую
subprocess.
Код
main.py:

#!/usr/local/bin/python3

alpha = {i+10:chr(65+i) for i in range(0, 26)}

def from_to(from_, to_, number):
    temp = int(number, from_)
    #print('debug -> {}'.format(temp))
    digits = []
    while temp > 0:
      reminder = temp % to_
      if reminder > 9:
        digits.append(alpha[reminder])
      else:
        digits.append(reminder)
      temp //= to_
      #print('debug -> {}'.format(digits))
    res = []
    while len(digits):
      res.append(digits.pop())
    return ''.join(list(map(lambda x: str(x), res)))

def app():
  print('Hello! U can convert numbers!')
  from_ = 0
  to_ = 0
  number = 0
  while from_ not in range(2, 35) or to_ not in range(2, 35):
    from_ = int(input('Choose base from convert to: '))
    to_ = int(input('Choose base for convert to: '))
    number = input('Enter number: ')
    result = from_to(from_, to_, number)
    print(result)
    break

if __name__ == '__main__':
    app()

Код тестироващика
auto.py:

#!/usr/bin/env python3

import subprocess

data = []
with open('test.txt', 'r') as f:
  for i in f.readlines():
    data.append(i.split(','))

data = list(map(lambda x: [i.rstrip() for i in x], data))

# for i in data:
  # from_ = i[0]
  # to_ = i[1]
  # num_ = i[2]
  # ans_ = i[3]
p = subprocess.Popen(["./main.py"], stdin=subprocess.PIPE,
                  stdout=subprocess.PIPE)
out, err = p.communicate('2\n3\n10101\n')
print(out)

Когда запускаю
auto.py почему-то вылетает такая ошибка:

Traceback (most recent call last):
    File "./main.py", line 36, in
      app()
    File "./main.py", line 28, in app
      from_ = int(input('Choose base from convert to: '))
  EOFError: EOF when reading a line
  Exception ignored in: <_io.TextIOWrapper name='' mode='w' encoding='UTF-8'>
  BrokenPipeError: [Errno 32] Broken pipe

Я уже пробовал и
stdin менять и
stdout, убирал цикл(который закомментирован), но в упор не замечаю что не так.

Я не уверен, что у Вас заработает этот вариант, но документация говорит, что входные данные должны быть переданы как массив байт:
<code>
out, err = p.communicate(b'2\n3\n10101\n')
</code>


tkinter listbox вернуть текст из выбранного элемента
Эта функция вернёт порядковый номер элемента в
listbox:

def get_item_index(event):
   index = event.widget.curselection()
   print(int(index[0] + 1))

Есть ли возможность вернуть текст выбранного элемента?

import tkinter as tk

def onselect(evt):
    w = evt.widget
    i = int(w.curselection()[0])
    value = w.get(i)
    print(value)

root = tk.Tk()

lb = tk.Listbox(root)
lb.insert(1, 'Python')
lb.insert(2, 'Perl')
lb.insert(3, 'C')
lb.insert(4, 'PHP')
lb.insert(5, 'JSP')
lb.insert(6, 'Ruby')

lb.pack()
lb.bind('<<ListboxSelect>>', onselect)

root.mainloop()


Кастомный словарь и врапер вокруг него
У меня имеется немного модифицированный словарь и врапер для чтения json-файлов, наследующий сей словарь.
Проблема в том, что при записи в файл записывается и входящий аргумент врапера -
file. Мне это ненужно. Что в данном случае мне следует сделать?

import collections
import functools
import json
import operator
import os

class Dict(dict):
    # TODO: add comp. function with "clone" feature
    def __setitem__(self, key, item):
        self.__dict__[key] = item

    def __getitem__(self, key):
        return self.__dict__[key]

    def __repr__(self):
        return repr(self.__dict__)

    def __len__(self):
        return len(self.__dict__)

    def __delitem__(self, key):
        del self.__dict__[key]

    def clear(self):
        return self.__dict__.clear()

    def copy(self):
        return self.__dict__.copy()

    def has_key(self, k):
        return k in self.__dict__

    def update(self, *args, **kwargs):
        return self.__dict__.update(*args, **kwargs)

    def keys(self):
        return self.__dict__.keys()

    def values(self):
        return self.__dict__.values()

    def items(self):
        return self.__dict__.items()

    def pop(self, *args):
        return self.__dict__.pop(*args)

    def get(self, *args):
        return functools.reduce(operator.getitem, args, self.__dict__)

    def __contains__(self, item):
        return item in self.__dict__

    def __iter__(self):
        return iter(self.__dict__)

    def __str__(self):
        return str(repr(self.__dict__))

И сам врапер:

class Wrapper(Dict):
    def __init__(self, file):
        super(Wrapper, self).__init__()
        self.file = file
        with open(file, "r", encoding="utf-8") as data:
            self.update(json.load(data))

    def __update(self, dicto, dictu):
        for k, v in dictu.items():
            if isinstance(v, collections.Mapping):
                dicto[k] = self.__update(dicto.get(k, {}), v)
            else:
                dicto[k] = v
        return dicto

    # save(<updated dict>)
    def save(self, dict_, indent=4):
        u = self.__update(self.get(), dict_)
        with open(self.file, "wb") as file:
            data = json.dumps(u, indent=indent, ensure_ascii=False).encode("utf8")
            file.write(data)

json-файл:

{
    "main": {
        "locale": "Русский"
    }
}

Вызов:

config = Wrapper(file="test.json")
config.save({"main": {"locale": "English"}})

print(config.get("main", "locale"))

Атрибут экземпляра
file, как и остальные, содержится в словаре
__dict__, поэтому он попадает в обновленный выходной файл. Чтобы этого избежать решений может быть много. Но, одно из самых универсальных (на случай, если класс-обертка будет расширяться другими атрибутами) - это механизм слотов.
Вам просто необходимо добавить нужные атрибуты в перечень слотов класса, чтобы исключить их из
__dict__:

class Wrapper(Dict):
    __slots__ = "file"  # может быть кортежем из нужных атрибутов


Не понимаю действия с переменными в python [дубликат]

На этот вопрос уже даны ответы здесь:

Почему присвоенная переменная "зависит" другой переменной

                                (4 ответа)

Закрыт 4 года назад.

Только начал изучать питон, вот в чем проблема

Допустим, я хочу, чтобы переменная a "запоминала" значение переменной b в определенном этапе программы. И чтобы я мог в любое время вызвать a  и получить значение [1,2,3]
Однако, питон выводит [1,2,3,4]
Почему так происходит, и как это исправить?

Когда вы пишете
a = b, то не создаете новый список
a, но просто ссылаетесь на список
b. В итоге получается, что обе переменные ссылаются на один и тот же список.
Чтобы получить 2 разных списка, создайте переменную
a, содержащую копию списка
b:

>>> b = [1,2,3]
>>> a = b[:]
>>> b.append(4)
>>> b
[1, 2, 3, 4]
>>> a
[1, 2, 3]


Запись текущей даты в файл
Есть необходимость создавать файл с именем-Текущая дата и писать текущую дату в файл. Для записи в файл использую
<code>
data_log = datetime.date.today()
print(data_log)

f = open('Log.txt', 'w', encoding='utf8')
f.write(data_log + '\n') вот тут ошибка. Как исправить? И дату в имя?
</code>
Спасибо.

Нужно преобразовать объект даты в строку:

f.write(str(data_log) + '\n')

или

f.write(data_log.strftime('%d-%m-%Y') + '\n')


Замена слова в списке, который лежит в .txt файле
У меня есть код, который достаёт из файла users.txt строку, в которой содержится id пользователя (это бот для VK на longpoll), далее он эту строку преобразовывает в список и меняет значение этого списка под индексом 1. Сама проблема: почему программа не меняет значение списка под индексом 1 в файле users.txt?
Вот сам код:
<code>
 `FIND = str(event.user_id)
  renick = open("users.txt", encoding="utf-8")
  for line in renick:
    if FIND in line:
       print("HEllo")
       words = line.split()
       words[1] = "nick"
       break
  renick.close()`
</code>

DELIMITER = ' '
lines = []

with open('users.txt', encoding="utf-8") as fh:
    lines = fh.readlines()

for n, line in enumerate(lines):
    words = line.strip().split(DELIMITER)
    if len(words) < 2:
        continue
    if words[1] == FIND:
        words[1] = 'nick'
        lines[n] = DELIMITER.join(words) + '\n'
        break

with open('users.txt', 'w', encoding="utf-8") as fh:
    fh.writelines(lines)


Сократить повторения от сочетаний/расстановок
Нужно подсчитать количество возможных вариантов расстановок(?) без повторений, при условии, что минимум один объект занимает одну из первых трех позиций, второй минимум одну из шести первых, третий одну из первых девяти, четвертый одну из первых 12ти и т.д. (объекты идентичны друг другу).
Т.е., логично, что мы можем расставить четыре объекта 3*5*7*9 способами. Но каким образом вывести алгоритм для подсчета уникальных расстановок (отличных друг от друга  только положением) или получить количество лишних повторений из полученных 945-ти способов.
Появилась идея реализации через количество сочетаний

C(x,y)=y!/(x!(y-x)!)

где x - количество возможных объектов, y - мест для размещения. Т.е. для 4 объектов должно выходить что-то вроде

C(1...3,3)*С(1...3,3)*С(0...2,3)*С(0...1,3)

Правда, вопрос теперь, как такой перебор на python реализовать.

Сгенерировать не так трудно, а вот простой формулы пока не вижу.
Для
[3,6,9,12] будет 273 варианта. Младшие позиции в бинарном представлении справа.

lst = []
def perebor(current, limits, last, level):
    if level == len(limits):
        lst.append(current)
        return
    else:
        for i in range(last + 1, limits[level]):
            perebor(current | (1<<i), limits, i, level + 1)

perebor(0, [2,4,6], -1, 0)
print(len(lst))
print(["{0:b}".format(x) for x in lst])

14
['111', '1011', '10011', '100011', '1101', '10101', '100101',
 '11001', '101001', '1110', '10110', '100110', '11010', '101010']


Удаление экземпляра класса в методе __init__ - Python 3.7
Есть класс
Foo:

class Foo:

    def __init__(self, data = None):
        if data == None:
            self.__del__()

    def __del__(self):
        print('Error')

f = Foo()    # Error
print(f)     # <__main__.Foo object at 0x7fc1210de1d0>

У меня такая проблема:
Если создаётся экземпляр класса, мне нужно проверить, передан ли аргумент
data. Если нет, создание класса нужно отменить. Я вызываю из метода
__init__ метод
__del__, но экземпляр остаётся в памяти, это можно проверить с помощью
print(f). Уже когда-то это делал, может, что-то забыл, но совсем не понимаю: как фиксить и что гуглить?

Имхо, нужно не удалять уже созданный экземпляр, а просто не создавать его. Созданием управляет метод
__new__, который срабатывает до
__init__, и получает на вход те же аргументы, что и он. Метод
__new__ должен создать и вернуть свеженький экземпляр класса. Соответственно, можно попробовать переопределить этот метод так, чтобы он в определённых случаях ничего не создавал.

class Foo:

    def __new__(cls, data=None):
        if data is None:
            print('Error')
            return None
        else:
            return super().__new__(cls)

f1 = Foo()    # Error
print(f1)     # None

f2 = Foo('some data')
print(f2)     # <__main__.Foo object at 0x7f3e5fb22a90>


Задействовать вложенные условия
У меня есть множество условий. Когда пользователь отправляет сообщение в группу, то ему отвечает бот.
Проблема заключается в том, что, когда пользователь вводит цифру 1, то ему выводится еще 3 варианта ответа, но после этого вложенные условия пользователь уже не может выбрать так как цикл начнется заново и за место вложенных будут проверяться основные условия.
Как я могу начать проверять вложенные условия, если пользователь выберет цифру один(первое основное условие)?
<code>
while True:
    for event in longpoll.listen():
        if event.from_user and not event.from_me:
        if response == "1":
            vk_session.method('messages.send',
                             {'user_id': event.user_id, 'message': 'Здравствуй\n'
                                                            '1. да\n2. нет\n 3. Не знаю', 'random_id': 0})
            if response == "1":
                vk_session.method('messages.send',
                                  {'user_id': event.user_id, 'message': '...', 'random_id': 0})
            elif response == "2":
                vk_session.method('messages.send',
                                  {'user_id': event.user_id, 'message': '...', 'random_id': 0})
            elif response == "3":
                vk_session.method('messages.send',
                                  {'user_id': event.user_id, 'message': '...', 'random_id': 0})
            else:
                vk_session.method('messages.send',
                                  {'user_id': event.user_id, 'message': 'Я вас не понял, выберите один из трех вариантов(укажите подходящую цифру)', 'random_id': 0})
            list_output()
        elif response == "2":
            vk_session.method('messages.send',
                              {'user_id': event.user_id, 'message': 'Пока, друг!', 'random_id': 0})
        else:
            vk_session.method('messages.send',
                              {'user_id': event.user_id, 'message': 'Я вас не понял', 'random_id': 0})
</code>

Я думаю что можно создать список и вносить туда пользователей от которых мы ожидаем ответа.
<code>
import vk_api
from vk_api.longpoll import VkLongPoll

LOGIN, PASSWORD = '[email protected]', 'mypassword'
IDKU = 'Я вас не понял, выберите один из трех вариантов' + \
    '(укажите подходящую цифру)'

vk_session = vk_api.VkApi(LOGIN, PASSWORD)
wait_next_round = []  # Users list

def list_output():
    pass

def next_round(response, _id):
    if response == "1":
        vk_session.method('messages.send',
                          {'user_id': _id,
                           'message': '...',
                           'random_id': 0})
    elif response == "2":
        vk_session.method('messages.send',
                          {'user_id': _id,
                           'message': '...',
                           'random_id': 0})
    elif response == "3":
        vk_session.method('messages.send',
                          {'user_id': _id,
                           'message': '...',
                           'random_id': 0})
    else:
        vk_session.method('messages.send',
                          {'user_id': _id,
                           'message': '...',
                           'random_id': 0})

    wait_next_round.remove(_id)
    list_output()

def main():
    # Допустим это тело программы где цикл

    try:
        vk_session.auth(token_only=True)
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return

    longpoll = VkLongPoll(vk_session)

    while True:
        for event in longpoll.listen():
            if event.from_user and not event.from_me:
                if event.user_id in wait_next_round:
                    next_round(event.text, event.user_id)
                else:
                    if event.text == "1":
                        vk_session.method('messages.send',
                                          {'user_id': event.user_id,
                                           'message': 'Здравствуй\n' +
                                           '1. да\n2. нет\n 3. Не знаю',
                                           'random_id': 0})
                        wait_next_round.append(event.user_id)
                    elif event.text == "2":
                        vk_session.method('messages.send',
                                          {'user_id': event.user_id,
                                           'message': 'Пока, друг!',
                                           'random_id': 0})
                    else:
                        vk_session.method('messages.send',
                                          {'user_id': event.user_id,
                                           'message': 'Я вас не понял',
                                           'random_id': 0})

if __name__ == "__main__":
    main()
</code>


TypeError: 'dict' object is not callable
Когда после загрузки сохраняю через функцию, то происходит вышеуказанная ошибка.

1, 2, 3, 4

Но когда сохраняю без функции, то всё работает.

1, 2, 3, 2

Почему так?

import json
import os

filename = fr"{os.environ['userprofile']}\desktop\file.json"

class Class():
    def __init__(self):
        self.age = 100

def save(filename, age):
    with open(filename,'w') as f_object:
        a = {}
        a["users"] = {"Jack": {"age": age}}
        json.dump(a, f_object, indent=4)

while True:
    var = input("1-new, 2-save, 3-load, 4-save_def, 5-quit: ")
    if var == "1":
        instance = Class()

    elif var == "2":
        with open(filename,'w') as f_object:
            a = {}
            a["users"] = {"Jack": {"age": instance.age,}}
            json.dump(a, f_object, indent=4)

    elif var == "3":
        with open(filename) as f_obj:
            save = json.load(f_obj)
        age = save["users"]["Jack"]["age"]
        instance = Class()
        instance.age = age

    elif var == "4":
        save(filename, instance.age)

    elif var == "5":
        quit()

В строке
save = json.load(f_obj) вы заменяете функцию
save словарём.


Передача объекта PyArrayObject в С
Создаю в Python черный RGB-кадр размером 720x576 (левый верхний угол закрашен другим цветом для проверки в C функции после передачи в нее этого кадра). Фрагмент кода python:

initial_frame = np.zeros((576, 720, 3))
for s1 in range(0, 20):
    for s2 in range(0, 20):
       initial_frame[s1][s2][0] = 80
       initial_frame[s1][s2][1] = 50
       initial_frame[s1][s2][2] = 120
SpecialFuncs.read_frame(initial_frame)

Далее кадр считывается в функции read_frame():

static PyObject* py_read_frame(PyObject* self, PyObject* args)
{
PyArrayObject *dst_rgb;
unsigned char *p_data = NULL;
npy_intp *size;
int n_row, n_col, n_strides;

if (!PyArg_ParseTuple(args, "O", &dst_rgb))
   return Py_BuildValue("i", -5);

p_data = (unsigned char *)PyArray_DATA(dst_rgb);
if (!p_data)
   return Py_BuildValue("i", -6);

size = PyArray_DIMS(dst_rgb);
n_row = size[0];
n_col = size[1];
n_strides = size[2];

for (int j1 = 0; j1 < n_row; j1++) { //rows
   for (int j2 = 0; j2 < n_col; j2++) { //columns
      if ((p_data[j1 * n_col * 3 + j2 * 3] == 80) ||
            (p_data[j1 * n_col * 3 + j2 * 3 + 1] == 80) ||
               (p_data[j1 * n_col * 3 + j2 * 3 + 2] == 80))
                  return Py_BuildValue("i", j1);
           }
      }
return Py_BuildValue("i", -7);
}

Я ожидаю найти первый закрашенный пиксель, но я его не вижу (функция проходит полностью цикл, не находя число 80). Такое впечатление, что указатель p_data смотрит не туда. При этом количество строк, столбцов и величина шага верные (n_row = 576, n_col = 720, n_strides = 3). Буду весьма признателен за любую помощь.

Скорее всего, Вам нужно использовать
shape=(3, 576, 720).
Вы ожидаете, что цветовые компоненты будут храниться в ячейке матрицы, но на самом деле у Вас будет несколько матриц, каждая размером MxN, и в каждой будет храниться конкретная цветовая компонента.

Вы ожидаете, что цветовые компоненты будут храниться в ячейке матрицы

Вывод сделан из предложенной Вами индексации:
p_data[j1 * n_col * 3 + j2 * 3]


Как в txt файле найти строку с каким-то словом и вывести второе слово на этой строке
Допустим:
(# -*- python -*- #)
В текстовом файлике есть строки. Есть строка
"Вася Пупкин". Я хочу найти строчку с словом
"Вася", и вывести второе слово на данной строке (
"Пупкин"). Так вообще реально?

FIND = "Вася"

with open("blabla.txt", encoding="utf-8") as  f:          # или другой еncoding=
    for string in f:
        if FIND in string:
            words = string.split()
            ind = words.index(FIND)
            print(words[ind + 1])
            break

Пример вводного файла
blabla.txt:

Сегодня красивый день.
Завтра будет вторник.
У меня хороший друг, его зовут Вася Пупкин и он из Симферополя.
Я теперь поеду к нему.

Вывод:

Пупкин


Php or Python for Web? [закрыт]

Закрыт. На этот вопрос невозможно дать объективный ответ. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

Закрыт 4 года назад.

                        Улучшить вопрос

Какой язык на данный момент лучше подходит,например, для написания соц.сети?
Php или Python?

Просто возьмите несколько социальных сетей и посмотрите на чем они написаны:

ВКонтакте — PHP.
Facebook — PHP.
Twitter — JavaScript, Ruby, Scala и Java.

Другие сети не дают узнать на чем они написаны, но я уверен, что на одна из них не написана на Python.
А вообще нету "лучшего" языка для веба. И у Python, и у PHP есть свои плюсы и минусы.

Сегодня мы поняли, что PHP и Python довольно сильные конкуренты и
  сравнивать их лоб в лоб не совсем корректно. Python только недавно
  начал набирать свою популярность, так как PHP уже много лет служит
  верностью и правдой для своих разработчиков. Количество вакансий всё
  время растёт, особенно с тех пор, как появился PHP7. На Python тоже
  большое количество вакансий, однако если вы живёте не в большом
  городе, то я советую начать с изучения PHP. Это даст вам возможность
  быстро найти работу и легко решать проблемы с помощью огромного
  комъюнити. Однако, если вы уже изучали Python или хотя бы немного
  знакомы с ним, то определенно начинайте изучать и строить свои первые
  сайты на Django. Не изучайте теорию, практикуйтесь и учитесь решать
  поставленые проблемы непосредственно на практике.

Источник


Как сделать поверку на наличие индекса в списке?
У меня есть список
nickname. Он состоит из двух слов. Я должен сделать так, что если пользователь пишет "ник Винокур", то сам ник кидается в переменную
nick, а если он после слова "ник" ничего не написал, ему программа кое-что пишет. Дело в том, что я беру данные от пользователя и делаю такой код:

nickname = text.split(). Далее я пишу:
nick = nickname[1]. Всё готово, но как сделать, чтобы проверялся список на наличие индекса [1]? Если его не будет в списке, выведется кое-что.

if len(nickname) < 2:
    print('кое-что')


Замена последнего вохождения в строке в dataframe (pandas)
Как заменить последнее вхождение в каждой строчке dataframe,
строка имеет вид ADVA.SFP/2G5U/D1549.32U/SM/LC#D20.SFP
Надо заменить первую
'.' и последнюю
'.'. Точку в центре надо оставить.
Первую точку заменил на
'$' -

import pandas as pd
file = pd.read_excel('Stock_base.xlsx', sep=';', encoding='cp1251')
file['Pos'] = file['pos'].str.replace('.', '$', 1)

Пример:
<code>
In [13]: df
Out[13]:
                                     Pos
0  ADVA.SFP/2G5U/D1549.32U/SM/LC#D20.SFP
1                    aaa.bbb.ccc.ddd.eee

In [14]: df['Pos'] = df['Pos'].str.replace(r'^([^.]*)\.(.*)\.([^.]*)', r'\1$\2$\3')

In [15]: df
Out[15]:
                                     Pos
0  ADVA$SFP/2G5U/D1549.32U/SM/LC#D20$SFP
1                    aaa$bbb.ccc.ddd$eee
</code>
PS разбор Regular Expression


Разные результаты base64
Всех приветствую. Пытаюсь на python расшифровать сообщения C++'a.
Но я столкнулся с такой проблемой:
Одну и ту же строку C++ и python шифруют по-разному
К примеру:

# Python

import  base64

encoded = base64.b64encode(b'hello')

print(encoded)

b'aGVsbG8='

Но C++ уже выводит такое:

aGVsbG8A

Как с этим быть?

// C++:

// Main:

#include "base64.h"

int main()
{
    const unsigned char f[6] = "hello";

    string encoded = base64_encode(f, sizeof(f));

    cout << encoded << endl;

    return 0;
}

// base64.h:

#ifndef BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A
#define BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A

#include <string>

std::string base64_encode(unsigned char const*, unsigned int len);
std::string base64_decode(std::string const& s);

#endif

// base 64.cpp:

#include "base64.h"
#include <iostream>

static const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";

static inline bool is_base64(unsigned char c) {
    return (isalnum(c) || (c == '+') || (c == '/'));
}

std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
    std::string ret;
    int i = 0;
    int j = 0;
    unsigned char char_array_3[3];
    unsigned char char_array_4[4];

    while (in_len--) {
        char_array_3[i++] = *(bytes_to_encode++);
        if (i == 3) {
            char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
            char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
            char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
            char_array_4[3] = char_array_3[2] & 0x3f;

            for (i = 0; (i < 4); i++)
                ret += base64_chars[char_array_4[i]];
            i = 0;
        }
    }

    if (i)
    {
        for (j = i; j < 3; j++)
            char_array_3[j] = '\0';

        char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
        char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
        char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);

        for (j = 0; (j < i + 1); j++)
            ret += base64_chars[char_array_4[j]];

        while ((i++ < 3))
            ret += '=';

    }

    return ret;

}

std::string base64_decode(std::string const& encoded_string) {
    int in_len = encoded_string.size();
    int i = 0;
    int j = 0;
    int in_ = 0;
    unsigned char char_array_4[4], char_array_3[3];
    std::string ret;

    while (in_len-- && (encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
        char_array_4[i++] = encoded_string[in_]; in_++;
        if (i == 4) {
            for (i = 0; i < 4; i++)
                char_array_4[i] = base64_chars.find(char_array_4[i]);

            char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
            char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
            char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];

            for (i = 0; (i < 3); i++)
                ret += char_array_3[i];
            i = 0;
        }
    }
if (i) {
    for (j = 0; j < i; j++)
        char_array_4[j] = base64_chars.find(char_array_4[j]);

    char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
    char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);

    for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
}

return ret;

}

Навскидку: вы в качестве длины строки для энкодинга предаете
sizeof(f), т.е. 6. Длина строки в данном случае 5, а не 6. Достаточно исправить этот момент и результат получается правильным.


Python, вывод кодированного текста в конслось
Имеется Python 3.7.2
Имеется txt файл в кодировке cp1251, в нём текст на русском.
Пытаюсь его вывести в консоль, а она мне выдает: codecs.StreamReaderWriter object at 0x0135adb0
Так вот, как сделать чтобы выводился текст?
Код:
import codecs
with codecs.open(r"D:\pythonw\qwer1.txt", "r", encoding="cp1251") as line:
    print(line)

codecs.open() возвращает не строку, а хэндлер открытого файла, из которого можно строки считывать:
<code>
import codecs

with codecs.open(r"D:\pythonw\qwer1.txt", "r", encoding="cp1251") as fh:
    for line in fh:
        print(line)
</code>


Как выровнять прямые при помощи opencv?
Нужно сделать чётко прямые линии с фотографии.
К примеру у нас нарисован прямоугольник и он сфотографирован под углом.
Как выровнять линии этого прямоугольника?

Если есть соответствие четырех пар точек, то построить матрицу перспективного преобразования с помощью getPerspectiveTransform и затем применить
warpPerspective
Пример на Py


Как найти количество строк длины N,что не содержат S как подстроку?
Дано строку что может содержать только буквы A,B,C, тогда количество всех строк длины N из етих букв будет 3^N,тогда ответ на задачу : 3^N - (количество строк что имеют подстрочку S). Как эффективно посчитать количество строк что не содержат подстроки S? А да забыл сказать S содержит только буквы A,B.
Ограничения:

N = 16
1 <= |S| <= 16

Примерчик:

2
AB

Ответ:

8

Нам не подходит одна строка AB, тогда количество 3^2 - 1 = 8.Так же написал brute force алгоритм на котором можно проверить тестики:

from itertools import product
n = int(input())
s = str(input())
a = [''.join(i) for i in product('ABC',repeat = n) if s not in "".join(i)]
print(len(a))

Пусть
PS[] - префиксы строки
S длиной от
1 до
lenS-1

F[k][j] - количество хороших строк длиной
k, оканчивающихся на
PS[j]  (в том числе
F[k][0], не оканчивающиеся на префиксы)
Похоже, что таблицу
F[][] заполнить нетрудно ряд за рядом.


Объединить две таблицы с разными форматами Pandas Python
Итак, есть исходный DF:

YEAR    COM SEC
2010    1   B
2011    1   B
2012    1   B
2013    1   B
2014    1   B
2015    1   B
2012    2   C
2013    2   C
2014    2   C
2015    2   C

Есть второй DF:

SEC 2008    2009    2010    2011    2012    2013    2014    2015
A           45      53      53      3       5       3       5       3
B           5       3       4       3       3       5       33      4
C           4       3       4       5       6       7       3       3

Необходимо сопоставить два DF по году и графе SEC
На выходе должно получиться нечто такое:

YEAR    COM SEC X1
2010    1   B   4
2011    1   B   3
2012    1   B   3
2013    1   B   5
2014    1   B   33
2015    1   B   4
2012    2   C   6
2013    2   C   7
2014    2   C   3
2015    2   C   3

d2 = (d2.set_index('SEC')
        .unstack()
        .reset_index(name='X1')
        .assign(YEAR=lambda d: d.pop('level_0').astype('int')))

res = d1.merge(d2)

Результат:

In [132]: res
Out[132]:
   YEAR  COM SEC  X1
0  2010    1   B   4
1  2011    1   B   3
2  2012    1   B   3
3  2013    1   B   5
4  2014    1   B  33
5  2015    1   B   4
6  2012    2   C   6
7  2013    2   C   7
8  2014    2   C   3
9  2015    2   C   3

Если столбцы, представляющие годы во втором фрейме являются числами (
[2009,2010, ...]), а не строками (
['2009','2019',...]), то решение можно упростить:

In [138]: (d1.merge(d2.set_index('SEC')
                      .unstack()
                      .reset_index(name='X1')
                      .rename(columns={'level_0':'YEAR'}))
Out[138]:
   YEAR  COM SEC  X1
0  2010    1   B   4
1  2011    1   B   3
2  2012    1   B   3
3  2013    1   B   5
4  2014    1   B  33
5  2015    1   B   4
6  2012    2   C   6
7  2013    2   C   7
8  2014    2   C   3
9  2015    2   C   3


Валидация json данных в python
Я новичок в Python, не судите строго... Кажется, это действительно тривиальный вопрос.
Мне нужно создать функцию, которая проверяет входящие данные JSON и возвращает Python dict. Я хочу быть уверен, что необходимые мне поля присутствуют в JSON файле и они заполнены корректно, а также проверить типы данных этих полей. Мне нужно использовать try-catch.
Не могли бы вы поделиться какими-то сниппетами или примерами, которые дадут мне ответы?

Вам нужна библиотека
jsonschema, данная библиотека позволяет проводить верификацию json по заданной схеме. И если обнаружены ошибки будет выдавать их в виде исключений с описанием. В схеме можно указывать как тип полей, так и диапазон допустимых значений, значения по умолчанию и пр.

from jsonschema import validate

schema = {
    "type": "object",
    "properties": {
        "name": {
            "type": "string"
            },
        "age": {"type": "number",
                "minimum": 18,
                "maximum": 110
                },
        "role": {
            "type": "string",
            "enum": ["admin", "user"]
            }
        }
    }

message = {"name": "Vasya", "age": 15, "role": "user"}

validate(message, schema)

Более подробно про создание схем можно посмотреть в стандарте JSON Schema