При попытке удалить один объект класса - удаляются все
Почему-то метод
__del__ в классе
Personal_Data удаляет все объекты, вместо одного. С чем это может быть связано и как это исправить?

class Personal_Data:
    total_people = 0 # Количество людей в телефонной книге
    def __init__(self, name, surname, phone_number):
        # Метод инициализации пользователя
        self.name = name
        self.surname = surname
        self.phone_number = phone_number
        Personal_Data.total_people += 1

    def __del__(self):
        print("Удален пользоваетль: {0}".format(self.name))
         # Удаление пользователя
        Personal_Data.total_people -= 1
        # Выводится оставшееся количество людей в телефоной книге
        print("Количество пользователей: {0}".format(Personal_Data.total_people))

    def introduce(self):
        print("Имя: {0}, Фамилия: {1}, Номер телефона {2}".format(self.name, self.surname, self.phone_number))

# Объекты класса
Vasiliy = Personal_Data('Vasiliy', 'Valakas', '88005553535')
Ivan = Personal_Data('Ivan', 'Ivanov', '88005553535')

# Объекты заносятся в список для дальнейших манипуляций с ними
members = [Vasiliy, Ivan]

for member in members:
    if member.name != member.name.lower():
        member.name = member.name.lower() # Если в строке есть символы с верхним регистром, то они переводятся в нижний

print("Что можно сделать: Посмотреть контакты (наберите 'контакты'), Добавить новый контакт ('добавить'), Удалить контакт ('удалить')")
# Пользователь выбирает какое действие совершить
void = input("Что будем делать --> ")

if void != void.lower():
    void = void.lower() # Если в строке есть символы с верхним регистром, то они переводятся в нижний

if void == 'контакты':
    for member in members:
        # Все пользователи заносятся в словарь, где ключом является имя пользователя
        new_dict = {
            member.name: member.phone_number
        }
        print(new_dict)

elif void == 'удалить':
    # Программа спрашивает какого пользователя удалить
    delete_who = input("Какого пользователя вы хотите удалить? --> ")
    if delete_who != delete_who.lower():
        delete_who = delete_who.lower() # Если в строке есть символы с верхним регистром, то они переводятся в нижний
    # Программа удаляет пользователя
    del delete_who
else:
    print("Действие не найдено!")

Объекты удаляются, потому, что скрипт завершился и удаляется вообще всё, что относится к этому скрипту.
Видимо, вам стоит завернуть в бесконечный цикл всю ту часть кода, которая отвечате за взаимодействие с пользователем, чтобы программа не завершалась после первой же выполненной команды.
У вас есть проблемы и в других местах:
<code>
# Все пользователи заносятся в словарь, где ключом является имя пользователя
new_dict = {
    member.name: member.phone_number
}
print(new_dict)
</code>
Нет, не все пользователи заносятся в словарь. У вас словарь пересоздаётся заново на каждой итерации. Так что в нём в итоге останется только последний объект.
Ну и про то, что del delete_who удаляет только строку с именем, но не удаляет объект, вам уже написали в комментариях.


Вычисление списка чисел Фибоначчи рекурсией
Через рекурсию вычисляю числа Фибоначчи.
Хочу, чтобы возвращался список чисел Фибоначчи длины
n, но в результате получаю ошибку:

TypeError: can only concatenate list (not "int") to list

Код:

def fib(n):
    s = []
    if n in (1, 2):
        return 1
    else:
        s.append(fib(n-1) + fib(n-2))
        return s

Не понимаю, почему происходит так. Заранее спасибо за помощь.

def fib(n):
    if n in (1, 2):
        return 1
    return fib(n - 1) + fib(n - 2)

print(fib(5))


Преобразование элементов списка(строки) в ВЕРХНИЙ РЕГИСТР python
Есть следующий список:
<code>
['фыа','ер','ук','рпап','прооп','фывф','уркпра','ыаываы','титит']
</code>
Значения в нём при каждом запуске будут разными
Как мне перенести строки в верхний регистр?

Вам необходимо применить метод строк
upper к каждому элементу, попутно добавляя его в новый список. Удобнее всего сделать это с помощью генератора.
Код:

li = ['фыа', 'ер', 'ук', 'рпап', 'прооп', 'фывф', 'уркпра', 'ыаываы', 'титит']

new_li = [x.upper() for x in li]
print(new_li)

stdout:

['ФЫА', 'ЕР', 'УК', 'РПАП', 'ПРООП', 'ФЫВФ', 'УРКПРА', 'ЫАЫВАЫ', 'ТИТИТ']

Замеры производительности

import random
from string import ascii_lowercase
import timeit

li = [''.join(random.choice(ascii_lowercase) for _ in range(32)) for _ in range(1000)]

print(timeit.timeit(lambda: [x.upper() for x in li]))   # 69.81857771100022
print(timeit.timeit(lambda: list(map(str.upper, li))))  # 49.37236840500009

Способ с использованием
map в среднем на 30% быстрее, чем способ со списковым включением


Python функции и область видимости глобальных переменных

state = "1"
pstate = ""

def fst_start(bot, message):
    main_keyboard = types.ReplyKeyboardMarkup(row_width=3, resize_keyboard=True)
    for txtbut in main_button_list:
        main_keyboard.add(types.KeyboardButton(text=txtbut))
    bot.send_message(chat_id=message.chat.id, text=tostart, reply_markup=main_keyboard)
    pstate= state
    state = ' '

В этой функции в строке

pstate= state

питон ругается на state

UnboundLocalError: local variable 'state' referenced before assignment

Как @Eurobeat_Intensifies подсказал в комментариях, Вы не можете использовать переменную, которой далее в функции присваивается значение.
Но её всё ещё можно достать из словаря глобальной области видимости, что решает Вашу проблему.
Пример:

x = 'hello'
y = 'spam'

def func():
    x = globals()['y']
    y = 'eggs'
    print(x, y)

func()
print(x, y)

stdout:

spam eggs
hello spam


Использование groupby вместо apply
Как заменить apply на groupby для подсчета кол-во совпадающих элементов исходного множества во множеством значений заданых в строках в массиве dataframe, чтобы новый код был более производительный чем исходный?
Планирую использовать код на кол-во записей порядка 40 000 000.
Исходный рабочий код

import pandas as pd
import numpy as np

df = pd.DataFrame([[1,2,3,4], [2,3,4,5], [3,4,5,6], [4,5,6,7]])
print(df)
s = {1,3}

hints = df.apply(lambda x: len(set(x) & s), axis=1).value_counts().sort_index()
print(hints)

Исходные данные:

   0  1  2  3
0  1  2  3  4
1  2  3  4  5
2  3  4  5  6
3  4  5  6  7

Результат:

0    1
1    2
2    1

Не знаю как здесь можно применить
groupby, но вы можете заменить
apply() на комбинацию
isin() и
sum():

hints = df.isin(s).sum(1).value_counts().sort_index()

Чуть подробнее:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame([[1,2,3,4], [2,3,4,5], [3,4,5,6], [4,5,6,7]] * 1_000_000)

In [3]: len(df.index)
Out[3]: 4000000

In [4]: s = {1,3}

In [5]: df.apply(lambda x: len(set(x) & s), axis=1).value_counts().sort_index()
Out[5]:
0    1000000
1    2000000
2    1000000
dtype: int64

In [6]: df.isin(s).sum(1).value_counts().sort_index()
Out[6]:
0    1000000
1    2000000
2    1000000
dtype: int64

In [7]: %timeit df.apply(lambda x: len(set(x) & s), axis=1).value_counts().sort_index()
2min 34s ± 4.76 s per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [8]: %timeit df.isin(s).sum(1).value_counts().sort_index()
840 ms ± 7.43 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)


Как правильно подать строки для лемматизации?
Провел токеннизацию большого текста, теперь пытаюсь подать эти строки на проведение лемматизации. Лемматизацию провожу с помощью pymorphy2, библиотека принимает только слово. Не могу понять как подать предложение по слову, но так чтобы он сохранил мне все в dataframe так же по предложениям.
<code>
data_clear = pd.read_csv('C:\\Users\\ugrobug\\Desktop\\out_token.csv', sep='\t', encoding='utf-8')

def lemma(data_clear):
    morph = pymorphy2.MorphAnalyzer()
    final_data = pd.DataFrame({'Question'})

    for i in data_clear['0']:
        c = morph.parse(i)[0]
        lemmas = c.normal_form
        print(lemmas)
    final_data.loc[len(final_data)]=[lemmas]

    final_data.to_csv('C:\\Users\\ugrobug\\Desktop\\out_lemma.csv', sep='\t', encoding='utf-8')

lemma(data_clear)
</code>

Пример:

from nltk import sent_tokenize, word_tokenize, regexp_tokenize
from pymorphy2 import MorphAnalyzer

def tokenize_n_normalize(sent, pat=r"(?u)\b\w\w+\b", morph=MorphAnalyzer()):
    return [morph.parse(tok)[0].normal_form
            for tok in regexp_tokenize(sent, pat)]

text = """Провел токеннизацию большого текста, теперь пытаюсь подать эти строки на проведение лемматизации. Лемматизацию провожу с помощью pymorphy2, библиотека принимает только слово. Не могу понять как подать предложение по слову, но так чтобы он сохранил мне все в dataframe так же по предложениям."""

df = pd.DataFrame({
  "sent": [sent for sent in sent_tokenize(text)]
})

df["sent"] = df["sent"].map(lambda x: " ".join(tokenize_n_normalize(x)))

результат:

In [22]: df
Out[22]:
                                                                                sent
0    провести токеннизация большой текст теперь пытаться подать этот строка на проведение лемматизация
1                            лемматизация провозить помощь pymorphy2 библиотека принимать только слово
2  не мочь понять как подать предложение по слово но так чтобы он сохранить я весь dataframe так же...


Tuple index out of range, но я не создавал кортеж
Есть код:

class Rubik:
    def __init__(self,Red=['r','r','r','r','r','r','r','r','r'],Blue=['b','b','b','b','b','b','b','b','b'],
                 Orange=['o','o','o','o','o','o','o','o','o'],Green=['g','g','g','g','g','g','g','g','g'],
                 White=['w','w','w','w','w','w','w','w','w'],Yellow=['y','y','y','y','y','y','y','y','y']):
        self.red = Red
        self.blue = Blue
        self.orange = Orange
        self.green = Green
        self.white = White
        self.yellow = Yellow

    def show_red(self):
        total = f"""{self.red[0]} {self.red[1]} {self.red[2]}\n
                   {self.red[3]} {self.red[4]} {self.red[5]}\n
                   {self.red[6]} {self.red[7]} {self.red[8]}"""
        return total

    def show_blue(self):
        total =  f"""{self.blue[0]} {self.blue[1]} {self.blue[2]}\n
                   {self.blue[3]} {self.blue[4]} {self.blue[5]}\n
                   {self.blue[6]} {self.blue[7]} {self.blue[8]}"""
        return total

    def show_orange(self):
        total = f"""{self.orange[0]} {self.orange[1]} {self.orange[2]}\n
                   {self.orange[3]} {self.orange[4]} {self.orange[5]}\n
                   {self.orange[6]} {self.orange[7]} {self.orange[8]}"""
        return total

    def show_green(self):
        total =  f"""{self.green[0]} {self.green[1]} {self.green[2]}\n
                     {self.green[3]} {self.green[4]} {self.green[5]}\n
                     {self.green[6]} {self.green[7]} {self.green[8]}"""
        return total

    def show_white(self):
        total =  f"""{self.white[0]} {self.white[1]} {self.white[2]}\n
                     {self.white[3]} {self.white[4]} {self.white[5]}\n
                     {self.white[6]} {self.white[7]} {self.white[8]}"""
        return total

    def show_yellow(self):
        total =  f"""{self.yellow[0]} {self.yellow[1]} {self.yellow[2]}\n
                     {self.yellow[3]} {self.yellow[4]} {self.yellow[5]}\n
                     {self.yellow[6]} {self.yellow[7]} {self.yellow[8]}"""
        return total

    def __str__(self):
        total = f"""
                {self.white[0]} {self.white[1]} {self.white[2]}
                {self.white[3]} {self.white[4]} {self.white[5]}
                {self.white[6]} {self.white[7]} {self.white[8]}\n
{self.red[0]} {self.red[1]} {self.red[2]}   {self.blue[0]} {self.blue[1]} {self.blue[2]}   \
{self.orange[0]} {self.orange[1]} {self.orange[2]}   {self.green[0]} {self.green[1]} {self.green[2]}
{self.red[3]} {self.red[4]} {self.red[5]}   {self.blue[3]} {self.blue[4]} {self.blue[5]}   \
{self.orange[3]} {self.orange[4]} {self.orange[5]}   {self.green[3]} {self.green[4]} {self.green[5]}
{self.red[6]} {self.red[7]} {self.red[8]}   {self.blue[6]} {self.blue[7]} {self.blue[8]}   \
{self.orange[6]} {self.orange[7]} {self.orange[8]}   {self.green[6]} {self.green[7]} {self.green[8]}\n
                {self.yellow[0]} {self.yellow[1]} {self.yellow[2]}
                {self.yellow[3]} {self.yellow[4]} {self.yellow[5]}
                {self.yellow[6]} {self.yellow[7]} {self.yellow[8]}"""
        return total

    def U(self, move=None):
        memory = [x for x in range(9)]
        red_list=['r','r','r','r','r','r','r','r','r']
        blue_list=['b','b','b','b','b','b','b','b','b']
        orange_list=['o','o','o','o','o','o','o','o','o']
        green_list=['g','g','g','g','g','g','g','g','g'],
        white_list=['w','w','w','w','w','w','w','w','w']
        yellow_list=['y','y','y','y','y','y','y','y','y']
        if move == None:
            memory[2] = 'w'
            memory[5] = 'w'
            memory[8] = 'w'

            white_list[2] = orange_list[2]
            white_list[5] = orange_list[5]
            white_list[8] = orange_list[8]

            orange_list[2] = yellow_list[2]
            orange_list[5] = yellow_list[5]
            orange_list[8] = yellow_list[8]

            yellow_list[2] = red_list[2]
            yellow_list[5] = red_list[5]
            yellow_list[8] = red_list[8]

            red_list[2] = memory[2]
            red_list[5] = memory[5]
            red_list[8] = memory[8]

        total = Rubik(red_list, blue_list, orange_list, green_list, white_list, yellow_list)
        return total

#==================================================================================================================================================
x = Rubik()
print(x.U())

Возникает исключение:

IndexError
tuple index out of range
  File "C:\Users\User\Desktop\разработка\Проекты\проект rubiks_cube\rubiks_cube.py", line 57, in __str__
    {self.yellow[6]} {self.yellow[7]} {self.yellow[8]}"""
  File "C:\Users\User\Desktop\разработка\Проекты\проект rubiks_cube\rubiks_cube.py", line 95, in <module>
    print(x.U())

Ошибка связанная с кортежом, хотя я кортеж не создавал... По-крайней мере намеренно. Примечательно, что без функции U() всё работает прекрасно. Объясните, пожалуйста, в чём ошибка и как её можно решить.
Или может я неправильно написал функцию init и неправильно внёс в неё списки?
Заранее благодарю.
P.s. попытался "поиграться" с функцией str, а точнее с переменной total. Ошибка выходит когда появляется строка

{self.orange[0]} {self.orange[1]} {self.orange[2]}   {self.green[0]} {self.green[1]} {self.green[2]}

green_list=['g','g','g','g','g','g','g','g','g'], - запятая не должна быть здесь. By insolor
(p.s. для незнающих: кортеж можно создать не используя скобки. Т.е. num = 1, 2, 3 - кортеж. Я случайно поставил запятую, оттуда и косяк. Спасибо insolor'у


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

bad_words = [
    'редиска', 'картофель', 'баклажан'
]

@client.event
async def on_message(message):
    for i in bad_words:
        if i in message.content.lower():
            await message.delete()

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

Например, можно использовать файл в формате JSON:
Код:

import json

# ... там, где это нужно
with open('bad_words.json', 'r') as f:
    bad_words = json.loads(f.read())

Файл:

["редиска", "картофель", "баклажан"]

Но учтите, что по стандарту JSON в файле кавычки должны быть двойными, а в конце списка не должно быть запятой. Если хочется больше вольности, то можно использовать
eval(), который парсит питоновские значения:

# ... там, где это нужно
with open('bad_words.data', 'r') as f:
    bad_words = eval(f.read())

Файл в таком случае может быть более свободного формата, но учтите, что это не JSON:

["редиска", 'картофель', 'баклажан', ]


Как поправить кодировку в XML документе?
При записи изменений в XML документ

<data>
<country name="Liechtenstein">
    <rank updated="yes">Москва</rank>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E"/>
    <neighbor name="Switzerland" direction="W"/>
</country>
<country name="Singapore">
    <rank updated="yes">Санкт-Петербург</rank>
    <year>2011</year>
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
</country>
<country name="Panama">
    <rank updated="yes">Новосибирск</rank>
    <year>2011</year>
    <gdppc>13600</gdppc>
    <neighbor name="Costa Rica" direction="W"/>
    <neighbor name="Colombia" direction="E"/>
</country>

с помощью метода

tree.write('output.xml')

слетает кириллица,

 from xml.dom.minidom import *
 import xml.etree.ElementTree as ET
 import ConfigParser

 conf = ConfigParser.RawConfigParser()
 conf.read('C:\config.conf')# Путь до файла указывается в конфиге

 path = conf.get('Path:', 'path')

 xml2 = parse(path)
 tree = ET.parse(path)
 root = tree.getroot()

 i = 1
 for rank in root.iter('rank'):
     if i in [1]:
        new_rank = 'Москва'
        rank.text = str(new_rank)
        rank.set('updated', 'yes')
 i += 1
 tree.write(path)

строчка

?xml version="1.0" encoding="WINDOWS-1251" standalone="true"?>

в начале документа удаляется. Документ открываю в Notpade++ в нём и работаю.

Для того, чтобы при сохранении XML в файл добавлялась строчка
<?xml version="1.0" ... нужно в метод write передавать флаг
xml_declaration:

...
tree.write(path, xml_declaration=True)

В этом же методе можно указать название кодировки, что будет записана в декларации XML:

...
tree.write(path, encoding='WINDOWS-1251', xml_declaration=True)


Обращение к функции в python
У меня есть следующий код:

def func():
   x= input()
   y=input()
   if (x!=y):
       return True
   else
        return False

Далее в главной программе мне нужно обратиться к данной функции. То есть, если
true, то
print('nice'), если
false, то
print('bad').
Как это сделать?

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

def func():
    x = input()
    y = input()
    if x != y:
        return True
    else:
        return False

if func():
    print('nice')
else:
    print('bad')

Примечания:

Вы пропустили
: после
else.
У Вас разные отступы в блоках
def,
if и
else (3, 4, 5). Желательно 4 пробела.
Несоответствие
PEP-8 (не следует обрамлять условие в скобки без необходимости, а вот пробелы между оператором
= были бы очень желанны)

P. S.:
Я бы сделал это немного иначе.
Для начала вынес бы
input() за пределы функции а его результаты передал бы как аргументы при вызове.
Также упростил бы условие, возвращая сразу результат проверки, и использовал бы аналог тернарного оператора (но это не обязательно):

def func(x, y):
    return x != y

a = input()  # Ещё можно так: "a, b = input(), input()"
b = input()  # Или так: "a, b = (input() for x in range(2))"

print('nice') if func(a, b) else print('bad')

Оптимизации можно продолжить.
Для начала - использовать аналог тернарного оператора на строки для печати.
А если отказаться от функции и переменных, то можно вообще сделать это в строчку:

print('nice' if input() != input() else 'bad')


Как определить кодировку строки и преобразовать в utf8?
Через
imap подключаюсь к серверу и получаю список сообщений. Проблема в кодировке тела письма - в
гугле оно одно, в
яндексе другое. Хочу чтобы система автоматом определяла кодировку и преобразовывала его в
utf8

import cchardet
def convert_encoding(data, new_coding = 'UTF-8'):
    encoding = cchardet.detect(data)['encoding']
    if new_coding.upper() != encoding.upper():
        data = data.decode(encoding, data).encode(new_coding)
    return data

def get_mails(login, password):
    print("Connecting to {}...".format(server))
    imap = imaplib.IMAP4_SSL(server)
    print("Connected! Logging in as {}...".format(login));
    imap.login(login, password)
    print("Logged in! Listing messages...");
    status, select_data = imap.select('INBOX')
    nmessages = select_data[0].decode('utf-8')
    status, search_data = imap.search(None, 'ALL')
    for msg_id in search_data[0].split():
        status, msg_data = imap.fetch(msg_id, '(RFC822)')
        msg_raw = msg_data[0][1].decode("utf8")

        mail = mailparser.parse_from_string(msg_raw)
        telo = convert_encoding(mail.body.encode()) # Вот тут траблы

Для примера -
mail.body содержит следующий текст

'<div>\\u041f\\u0440\\u043e\\u0432\\u0435\\u0440\\u043a\\u0430 \\u0441</div>'

Выдаёт ошибку

TypeError: decode() argument 2 must be str, not bytes

Попробуй использовать chardet для определения кодировки. Эта библиотека может определить вероятность использования кодировки в тексте.

import chardet

rawdata = b"Тело сообщения"
meta = chardet.detect(rawdata)
try:
    rawdata.decode(meta['encoding'])
except: KeyError:
    print('Кодировка не известна')

Для извлечения символов из кода html, следует воспользоватся
html.unscape

import html
print(html.unescape('&pound;682m'))


Python скролл страницы с помощью pyautogui
В документации к модулю pyautogui указана команда pyautogui.scroll(10) но это не работает. Может кто сталкивался?

Окно, к которому применяется scroll, должно быть активно (например, с помощью функции
pyautogui.click()). И скроллирование страницы вниз -
pyautogui.scroll(-10).


Как преобразовать unicode в utf8?
Использую
imaplib для получения почты. Тело письма выглядит таким образом

'\\u0417\\u0434\\u0440\\u0430\\u0432 ...'

Пробую вот так

mail.body.encode('unicode-escape').decode('unicode-escape')

На выходе такая же строка

Попробуйте сделать так
<code>
mail.body.encode('utf-8').decode('unicode-escape')
</code>


Как заполнить NaN если возможно одно значение?
Представим таблицу из двух колонок в датафрейме:

0 NaN
0 NaN
0 1
1 0
1 5
1 NaN
2 0
0 NaN
0 1
2 1
2 NaN
3 NaN
3 500
3 NaN

Как быстро заполнить справа
NaN только напротив тех значений слева, для которых существует, важный момент, как
NaN так и только единственное не
NaN значение справа?
Желаемый результат:

0 1
0 1
0 1
1 0
1 5
1 NaN
2 0
0 1
0 1
2 1
2 NaN
3 500
3 500
3 500


Как получить значение из @property внутри класса?
Есть класс
foo и метод этого класса
fuu, в котором я хочу использовать
_obj как параметр по умолчанию.

class foo:

    def __init__(self):
        self._obj = "test"

    @property
    def obj(self):
        return self._obj

    @obj.setter
    def obj(self,val):
        self._obj = val

    def fuu(self, val = obj):
        return val + "test"

К сожалению, при вызове метода
fuu() мне выпадает исключение:

>>> s = foo()
>>> s.obj
'test'
>>> s.fuu()
Traceback (most recent call last):
  File "<pyshell#35>", line 1, in <module>
    s.fuu()
  File "/Users/r2d2/Desktop/asda.py", line 14, in fuu
    return val + "gfhjfjh"
TypeError: unsupported operand type(s) for +: 'property' and 'str'

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

Исправьте fuu вот так:

def fuu(self, val = None):
    val = val or self.obj
    return val + "test"

Просто чтобы получить значение property, нужно вызвать его от self. А в аргументе по умолчанию self указать не получится. Поэтому его вызывать можно только внутри метода, где self уже есть.
Но вообще, это выглядит как-то очень переусложнено. Если внутри fuu вам нужен self._obj, то прямо так его и вызывайте. Зачем вам для этого ещё и property?

class foo:

    def __init__(self):
        self._obj = "test"

    # Property не нужно,
    # обошлись и без него

    def fuu(self, val = None):
        val = val or self._obj
        return val + "test"

s = foo()
print(s.fuu())


Пройтись по ключам начиная с определенного. Словарь python
Есть следующий код:

dic = {'A':213, 'B':1424, 'F':412, 'Gs':asf}
for key in dic:
    print(key)

Как можно проитерировать его, начиная со второго ключа?
Или, например, с ключа
F?

В CPython реализации Python 3.6 элементы словаря сохраняют порядок данный им при создании. Это деталь реализации, не гарантированная стандартом языка.
Начиная с Python 3.7 - это гарантированное поведение для любой реализации Python:

the insertion-order preservation nature of dict objects has been declared to be an official part of the Python language spec.

Соответственно, для Python 3.7+ вы можете сделать:

In [6]: list(dic.keys())[2:]
Out[6]: ['F', 'Gs']

Для более ранних версий вы можете воспользоваться
OrderedDict, как вам уже посоветовал @Хачатур Саркисян:

In [9]: from collections import OrderedDict

In [10]: odic = OrderedDict(dic)

In [11]: list(odic.keys())[2:]
Out[11]: ['F', 'Gs']


Разделение текста на блоки и запись этих блоков в новые файлы
Есть файл test.xml

<Файл какой-то текст>
  <ИД какой-то текст>
  </ИД>
</Файл>

<Файл еще какой-то текст>
  <ИД еще какой-то текст>
  </ИД>
</Файл>

<Файл еще какой-то новый то текст>
  <ИД еще какой-то новый текст>
  </ИД>
</Файл>

Как видно, блоки теста разделены между собой двумя пустыми строками. Необходимо каждый блок текста поместить в отдельный файл, т.е по нашему примеру, чтобы было три файла:
1.xml

<Файл какой-то текст>
  <ИД какой-то текст>
  </ИД>
</Файл>

2.xml

<Файл еще какой-то текст>
  <ИД еще какой-то текст>
  </ИД>
</Файл>

3.xml

<Файл еще какой-то новый то текст>
  <ИД еще какой-то новый текст>
  </ИД>
</Файл>

Подскажите пожалуйста, как это можно сделать.

with open('test.xml', encoding='utf-8') as input_file:
    for i, lines in enumerate(input_file.read().split('\n\n'), start=1):
        with open(str(i) + '.xml', 'w', encoding='utf-8') as output_file:
            output_file.writelines(lines)


Улучшить скорость выполнения алгоритма
есть код:

mask = (latitude >= latitudeMin) * (latitude <= latitudeMax) * (longitude >= longitudeMin) * (longitude <= longitudeMax)

points = np.zeros(shape=(latitude[mask].shape[0], 2))
points[:, 0] = longitude[mask]
points[:, 1] = latitude[mask]

Выполняется вечно долго. размер latitude и longitude = 6700x12000. Надо чтобы выполнялось быстрее, если это возможно. Спасибо за любую помощь.

def get_mask(x_index, y_index, ncols, nrows):
    """

    """
    mask_nodata = np.zeros(shape=(nrows, ncols))
    mask_nodata[y_index, x_index] = 1
    for i in range(2):
        cusum_0 = np.cumsum(mask_nodata, axis=0)
        cusum_1 = np.cumsum(mask_nodata, axis=1)
        mask_nodata = (cusum_0 < cusum_0[-1, :]) * (0 < cusum_0) + (cusum_1.T < cusum_1[:, -1].T).T * (0 < cusum_1)
    return mask_nodata

def getAllDatasets(path_to_hdf):
    """
    Method to get all keys from h5 file

    path_to_hdf - file path string variable

    return all key from a file

    """
    sub_data = gdal.Open(path_to_hdf, gdal.GA_ReadOnly).GetSubDatasets()
    return {key.split(' ')[1]: str(value.split(':')[-1]) for (value, key) in sub_data}

def getDataFromFile(path_to_hdf, num):
    """
    Method to get Data from file by key

    path_to_hdf - file path string variable
    num - int key

    return data array

    """

    hdf_data = gdal.Open(path_to_hdf, gdal.GA_ReadOnly)
    subdataset_read = hdf_data.GetSubDatasets()[num]
    ds_sub = gdal.Open(subdataset_read[0],gdal.GA_ReadOnly)
    return ds_sub.ReadAsArray()

def getCoordinateTransformerOutOfTheLambertProjectionToWGS():
    """

    Method for creating a tool to convert from Lambert to WGS

    return coordinate transformation, and projection

    """

    projection = 'PROJCS["Lambert_Conformal_Conic",' \
                             'GEOGCS["GCS_WGS_1984",' \
                             'DATUM["WGS_1984",' \
                             'SPHEROID["WGS_84",6378137.0,298.252223563]],' \
                             'PRIMEM["Greenwich",0.0],' \
                             'UNIT["Degree",0.0174532925199433]],' \
                             'PROJECTION["Lambert_Conformal_Conic_2SP"],' \
                             'PARAMETER["False_Easting",0.0],' \
                             'PARAMETER["False_Northing",0.0],' \
                             'PARAMETER["Central_Meridian",79.950619],' \
                             'PARAMETER["Standard_Parallel_1",67.41206675],' \
                             'PARAMETER["Standard_Parallel_2",43.58046825],' \
                             'PARAMETER["Scale_Factor",1.0],' \
                             'PARAMETER["Latitude_Of_Origin",55.4962675],' \
                             'UNIT["Meter",1]]'

    projection_wgs = '''GEOGCS["WGS 84",
    DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],
    AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
    UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
    '''
    lambert = osr.SpatialReference()
    lambert.ImportFromWkt(projection)

    wgs84 = osr.SpatialReference()
    wgs84.ImportFromWkt(projection_wgs)
    return osr.CoordinateTransformation(wgs84, lambert), projection

def saveToFile(outputFileName, ncols, nrows, geotransform, projection, nodata):

    return "af"

if __name__ == "__main__":
    reflectance = getDataFromFile("SVI01_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5", 2)
    reflectance2 = getDataFromFile("SVI02_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5",2)
    reflectance3 = getDataFromFile("SVI03_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5",2)
    brightnessTemperature4 = getDataFromFile("SVI04_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5",0)
    brightnessTemperature5 = getDataFromFile("SVI05_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5",0)

    latitude = getDataFromFile("GIMGO_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5",1)
    longitude = getDataFromFile("GIMGO_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5",2)
    ###Температура
    file = hdf.File('SVI04_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5')
    brightnessTemperature4DataFactor = np.array(file['All_Data/VIIRS-I4-SDR_All/BrightnessTemperatureFactors'])[:2]
    file = hdf.File('SVI05_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5')
    brightnessTemperature5DataFactor = np.array(file['All_Data/VIIRS-I5-SDR_All/BrightnessTemperatureFactors'])[:2]
    ###3 канала
    file = hdf.File('SVI01_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5')
    reflectanceDataFactor = np.array(file['All_Data/VIIRS-I1-SDR_All/ReflectanceFactors'])[:2]
    file = hdf.File('SVI02_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5')
    reflectance2DataFactor = np.array(file['All_Data/VIIRS-I2-SDR_All/ReflectanceFactors'])[:2]
    file = hdf.File('SVI03_npp_d20190716_t0808475_e0821357_b00001_c20190716104346439000_ipop_dev.h5')
    reflectance3DataFactor = np.array(file['All_Data/VIIRS-I3-SDR_All/ReflectanceFactors'])[:2]

    ct,projection = getCoordinateTransformerOutOfTheLambertProjectionToWGS()

    resolution = 375 #Размер пикселя
    latitudeMin = latitude[latitude[...,0]>-500].min() #Latitude min > -999 Non data
    latitudeMax = latitude[latitude[...,0]>-500].max() #Latitude max > -999 Non data
    longitudeMin = longitude[longitude[...,0]>-500].min() # Longitude min >-999 Non data
    longitudeMax = longitude[longitude[...,0]>-500].max() #Longitude max > -99 Non data

    mask = (latitude >= latitudeMin) * (latitude <= latitudeMax) * (longitude >= longitudeMin) * (longitude <= longitudeMax)

    z = np.array(ct.TransformPoints(
        np.array([[latitudeMax, latitudeMin],
                  [longitudeMin, latitudeMax],
                  [longitudeMax, latitudeMax],
                  [longitudeMin, latitudeMin],
                  [longitudeMax, latitudeMin]]
                )))[:, :2]

    height = (z[1:3, 1].max() - z[0, 1]) / resolution
    width = (z[-1, 0] - z[-2, 0]) / resolution

    x_min, y_max = z[-2, 0], z[1:3, 1].max()

    ncols = int(width)
    nrows = int(height)

    x_intervals = np.array(x_min + np.arange(ncols) * resolution)
    y_intervals = np.array(y_max- np.arange(nrows) * resolution)

    geotransform = [x_min, resolution, 0, y_max, 0, -resolution]
    del x_min
    del y_max
    del z
    print('Посчитаны геотрансформации')
    points = np.zeros(shape=(latitude[mask].shape[0], 2))
    points[:, 0] = longitude[mask]
    points[:, 1] = latitude[mask]
    print('Посчитаны point')
    coord = np.array(ct.TransformPoints(points))[:, :2]
    x_index = np.searchsorted(x_intervals, coord[:, 0], 'left')
    y_index = np.searchsorted(y_intervals[::-1], coord[:, 1], 'left')
    y_index = nrows - y_index - 1

    print('Посчитаны coordinate')

    mask_nodata = get_mask(x_index=x_index, y_index=y_index, ncols=ncols, nrows=nrows)

в следующем блоке:

points = np.zeros(shape=(latitude[mask].shape[0], 2))
points[:, 0] = longitude[mask]
points[:, 1] = latitude[mask]

latitude[mask] - вычисляется дважды. Этот код можно заменить на следующий:

points = np.column_stack((longitude[mask], latitude[mask]))


Палиндром и метод replace
Делаю скрипт "Проверка на палиндром".Нужно чтоб скрипт проверял текст на наличие спец.символов, а за тем убирал их если они были найдены.Вот собственно код:
<code>
text = input(" --> ")
array = ('.',',',' ','!')

for i in array:
    if text.find(i):
        text.replace(i,'')

if text.lower() == text[::-1].lower():
    print('yes')
else:
    print('no')

</code>
Программа работает,но скрипт не убирает спец.символы из текста,есть подозрения на 2 или 6 строки.Хелп ми!

text.replace(i,'') возвращает измененную строку, но сама переменная
text остается неизменной
но я бы делал это с использованием регулярных выражений:

import re
import string

def is_palindrome(s):
    pat = f"[\s{re.escape(string.punctuation)}]"
    s = re.sub(pat, "", s).lower()
    return s == s[::-1]

тесты:

In [8]: is_palindrome("Assa")
Out[8]: True

In [9]: is_palindrome(".A-s,sa!")
Out[9]: True

In [10]: is_palindrome("Massa")
Out[10]: False


Sublime text 3 изменить текст с помощью регулярных выражений
В
sublime text 3 нужно использовать регулярное выражение и заменить текст так, чтобы из текста:

привет\Приветос! как тебя зовут?
привет\Привет привет
привет\Салют!
как дела\Да как посмотреть.
как дела\Всё в порядке. А у тебя как дела?
как дела\Как в сказке!!!

Получить это:

--привет
-Приветос! как тебя зовут?
--привет
-Привет привет
--привет
-Салют!
--как дела
-Да как посмотреть.
--как дела
-Всё в порядке. А у тебя как дела?
--как дела
-Как в сказке!!!

Или же решение с помощью
python

Код:

import re

with open('text.txt') as f:
    string = f.read()

with open('output.txt', 'w') as f:
    res = re.sub(r'\\', '\n-', '--' + re.sub(r'\n', '\n--', string))
    f.write(res)

text.txt:

привет\Приветос! как тебя зовут?
привет\Привет привет
привет\Салют!
как дела\Да как посмотреть.
как дела\Всё в порядке. А у тебя как дела?
как дела\Как в сказке!!!

output.txt:

--привет
-Приветос! как тебя зовут?
--привет
-Привет привет
--привет
-Салют!
--как дела
-Да как посмотреть.
--как дела
-Всё в порядке. А у тебя как дела?
--как дела
-Как в сказке!!!


Запись Dataframe в MSSQL 2008 Кодировка
помогите разобраться:
Есть датафрейм который я хочу перенести в базу SQL

from sqlalchemy import create_engine
con = create_engine('mssql+pymssql://login:Pass@srv/trade_analiz_sql')
sale_TVC_total.to_sql('ABC_analiz', con, if_exists='replace', index=False, chunksize=1000)

Но при записи русские символы заменяются на знаки вопроса.
Параметр сортровки в SQL стоит SQL_Latin1_General_CP1_CI_AS.
В тестовую базу с параметром Cyrillic_General_CI_AS пишется без проблем, но в нужной мне базе данный параметр поменять нельзя.
Подскажите как быть.
Пробовал добавлять в подключении параметр кодировки

con = create_engine('mssql+pymssql://login:Pass@srv/trade_analiz_sql?charset=utf8')

пробовал разные кодировки, но результат тот же. Может не те кодировки пробовал? В сети ответа не нашел.
Заранее спасибо.

Судя по тому что вы используете
if_exists='replace' и данные попадают в таблицу, можно сделать предположение что у вас есть права на создание таблицы в SQL Server DB, т.к. при использовании
if_exists='replace' таблица создается если таблицы с таким именем не существует или удаляется существующая и создается новая.
Попробуйте явно указать тип
NVARCHAR для столбца с русским текстом:

from sqlalchemy.types import NVARCHAR

sale_TVC_total.to_sql('ABC_analiz', con, if_exists='replace',
                      dtype={'column_name': NVARCHAR(<max_length>)},
                      index=False, chunksize=1000)


Dash Datatable editable=True не работает [закрыт]

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

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

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

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

В одной из таблиц не работает параметр editable=True, вот код этой таблицы:
<code>
dash_table.DataTable(
       id='to-add-row-table',
       columns=to_add_columns,
       dropdown={
            'Наименование': {
                 'options': to_add_names
             }
       },
       data=[
             first_record
       ],
       editable=True,
       style_cell={'width': '100px', 'height': '0', 'visibility': 'hidden'},
       style_data={'background-color': TO_ADD_COLOR, 'visibility': 'visible',},
       style_table={'border': '1 px solid blue'})
</code>
Собственно, таблица просто не редактируется и все, любые данные предоставлю (стили css везде убирал, ставил и убирал callback'и на эту таблицу, не помогло)

Алгоритм действий:

для начала просто выполните код из примера (Adding or removing rows) один-в-один, ничего не меняя
подставьте ваши данные и убедитесь, что код работает правильно
после этого можно попробовать менять стили, наводить красоту и т.д.

идея в том, чтобы отловить тот шаг (изменение) после которого таблица перестает редактироваться


Парсинг HTML файла с помощью BeautifulSoup в DataFrame
Имеется файл вида:

<TD class="c1">111-1111</TD>
<TD class="c2">AA1111-1111</TD>
<TD class="c3">NAME1</TD>
<TD class="c4"><INPUT type="text" id="F1" readonly="readonly" value=" .368"></TD>
<TD class="c5"><INPUT type="text" id="Q1" readonly="readonly" value=""></TD>
</TR>
<TR class="r1">
<TD class="c1">222-2222</TD>
<TD class="c2">BB2222-2222</TD>
<TD class="c3">NAME2</TD>
<TD class="c4"><INPUT type="text" id="F2" readonly="readonly" value=" 1.28"></TD>
<TD class="c5"><INPUT type="text" id="Q2" readonly="readonly" value=""></TD>
</TR>

С него мне нужна информация в виде pandas.DataFreme которая лежит в блоках TD class="c1", TD class="c2",TD class="c3" и значение value= в TD class="c4".
Что бы ее получить я делаю следующее:

soup = BeautifulSoup(html,'lxml')
description = [element.text for element in soup.find_all(class_="c3")]
component = [element.text for element in soup.find_all(class_="c1")]
code = [element.text for element in soup.find_all(class_="c2")]
val = re.findall(r'value="(.*?)"', html)
value = [value for value in val if value != '']
value.insert(0, 'Value')

data = []
for a, b, c, in zip(component ,description,value):
    data.append([a, b, c,])

df = pd.DataFrame(data, columns=['cod','desc','val'])

Код работает, если есть предложения по его улучшению (а я уверен что этот код можно улучшить :) ), буду рад выслушать!!!
Собственно вопрос, как мне значение value= которое у меня сейчас  .368 привести к числовому значению вида 0,368 ?
Буду благодарен за любую информацию !

Попробуйте так:

import pandas as pd
from bs4 import BeautifulSoup
from pathlib import Path

def get_vals(soup, filt="[class='c4']"):
    ret = [x.input.attrs["value"].strip()
           for x in soup.select(f"td{filt}")[1:]]
    return pd.to_numeric(ret, errors="coerce")

url = r"C:\download\CONCTEXT_NCS_S0907R50B.htm"

soup =  BeautifulSoup(Path(url).read_text(encoding="utf-8"), 'lxml')

df = pd.read_html(url, header=0)[0]
df["Recipe Qty"] = get_vals(soup, filt="[class='c4']")

результат:

In [123]: df
Out[123]:
  Component     S-W Code                  Description  Recipe Qty  Required Quantity
0  241-2905  TZ4103-3905                   BLUE FTALO       0.368                NaN
1  241-6909  TZ4103-2909                    OXYDE RED       1.280                NaN
2  241-7906  TZ4103-3406                 RED BORDEAUX       1.120                NaN
3   X80LC-G          NaN  WHITE TEXTURED TOP COAT (*)     997.232                NaN

In [124]: df.dtypes
Out[124]:
Component             object
S-W Code              object
Description           object
Recipe Qty           float64
Required Quantity    float64
dtype: object


django ошибка при записи - python manage.py migrate
в файле models.py было:

from django.db import models

class News(models.Model):
    titleNews = models.CharField(max_length=120)
    textNews = models.TextField()
    dateNews = models.DateTimeField()

стало:

from django.db import models

class News(models.Model):
    titleNews = models.CharField(max_length=120)
    textNews = models.TextField()
    dateNews = models.DateTimeField()
    imgnamenews = models.CharField(max_length=100)

и я написал -

python manage.py makemigrations

потом -

python manage.py migrate

и все было хорошо но я изменил файл models.py на

from django.db import models

class News(models.Model):
    titleNews = models.CharField(max_length=120)
    textNews = models.TextField()
    dateNews = models.DateTimeField()
    ImgNews = models.TextField()

и написал -

python manage.py makemigrations

далее -

python manage.py migrate

и батс ошибка:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, index, sessions
Running migrations:
  Applying index.0003_auto_20190716_1950...Traceback (most recent call last):
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: NOT NULL constraint failed: new__index_news.ImgNews

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\commands\migrate.py", line 234, in handle
    fake_initial=fake_initial,
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\executor.py", line 245, in apply_migration
    state = migration.apply(state, schema_editor)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\operations\fields.py", line 112, in database_forwards
    field,
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\sqlite3\schema.py", line 327, in add_field
    self._remake_table(model, create_field=field)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\sqlite3\schema.py", line 286, in _remake_table
    self.quote_name(model._meta.db_table),
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\base\schema.py", line 137, in execute
    cursor.execute(sql, params)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\utils.py", line 99, in execute
    return super().execute(sql, params)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\пк\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: NOT NULL constraint failed: new__index_news.ImgNews

Что мне делать?

Вариант 1: убрать ограничение на значение
NULL в поле
ImgNews, создать новую миграцию и выполнить её
Вариант 2: очистить Вашу БД и тогда выполнить
python manage.py migrate
Суть проблемы: вероятно, в Вашей БД уже есть ряд записей в этой таблице, вследствие чего, при изменении таблицы, Django пытается сохранить все хранящиеся там данные, изменив их в соответствии с новой структурой. А т.к. при смене типа поля он не может автоматически конвертировать данные в новый тип, он пытается оставить новое поле пустым в каждой записи и сталкивается с ограничением
NOT_NULL.


Вывод строк со случайным таймаутом
Хочу вывести строку через случайное количество времени. После ее вывода в той же строке выводится еще слово через случайное количество времени. После чего выводится вторая строка по такому же принципу.
Пример:

Запуск программы;
Выводится строка через случайное время "Моя первая основная строка...";
Выводится дополнительная часть в этой же строке "Моя основная строка...Дополнительная строка номер 1";
Выводится строка через случайное время "Моя вторая основная строка...";
Выводится дополнительная часть в этой же строке "Моя основная вторая...Дополнительная строка номер 1"

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

Можно просто заснуть на нужное время

import time
import random

time.sleep(random.random() * 3)
print('Основная1... ', end='', flush=True)

time.sleep(random.random() * 3)
print('Дополнительная1')

time.sleep(random.random() * 3)
print('Основная2... ', end='', flush=True)

time.sleep(random.random() * 3)
print('Дополнительная2')

Чтобы программа не простаивала в между выводом строк, можно организовать вывод по таймеру.
Hо при этом также будут задействованы потоки:
Timer потомок
Thread


Замена строк в файле по номеру на Python
У меня есть 3 txt файла: inter.txt (файл содержащий интервалы)

2-4
8-10
13-14

lesno.txt (исходный фай времени)

00:00:16
00:00:10
00:00:25
00:00:11
00:00:16
00:00:03
00:00:05
00:00:16
00:00:22
00:00:32
00:00:16
00:01:01
00:00:06
00:00:16
00:00:11

bitty.txt (измененное время)

00:00:03
00:00:02
00:00:01
00:00:05
00:00:06
00:00:07
00:00:01
00:00:01

Задача состоит в том, чтобы в файле lesno.txt в интервалы указанные в inert.txt вставить новые значения из bitty.txt и можно всё в новый файл newlesno.txt

00:00:16
00:00:03
00:00:02
00:00:01
00:00:16
00:00:03
00:00:05
00:00:05
00:00:06
00:00:07
00:00:16
00:01:01
00:00:01
00:00:01
00:00:11

Есть часть кода, которая текстовые интервалы переносит в python-список:

inter = []

with open('inter.txt', 'r', encoding='utf-8') as f_inp:
    inter_lines = f_inp.readlines()

    for i in range(len(inter_lines)):
        x, y = map(float, inter_lines[i].split('-'))

        inter.append((x, y))     # x - начало интервала y - конец

Но вот как дальше быть не знаю. Пробовал разные варианты, в основном все заканчивалось тем, что оно все копирует и из 15 строк выходит 45-100...
Вопрос: Как заменить строки в файле по известным номерам строк?

Можно сделать так:

import numpy as np
#читаем все файлы в списки:
lesno = [x.strip() for x in open(r'lesno.txt', 'r').readlines()]
inter = [x.strip() for x in open(r'inter.txt', 'r').readlines()]
bitty = [x.strip() for x in open(r'bitty.txt', 'r').readlines()]

#собственно, код:
res = np.empty_like(lesno)              #создаем пустой numpy-массив по подобию lesno
for i in inter:                         #и заполняем его значениями из bitty в
    bounds=list(map(int, i.split('-'))) #соответствии с интервалами в inter
    for j in range(bounds[0]-1, bounds[1]):
        res[j] = bitty.pop(0)

mask=(res =='')  #создаем маску пустых элементов полученного массива
res[mask] = np.array(lesno)[mask] #заполняем пустые элементы значениями из lesno

Ну и получаем:

print(res.tolist()) #вывод на печать с преобразованием из массива numpy в обычный список

['00:00:16', '00:00:03', '00:00:02', '00:00:01', '00:00:16', '00:00:03', '00:00:05', '00:00:05', '00:00:06', '00:00:07', '00:00:16', '00:01:01', '00:00:01', '00:00:01', '00:00:11']

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


Напишите программу, которая получает на вход три целых числа, по одному числу в строке [закрыт]

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

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

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

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

Задание:

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

<code>
a = int(input())
b = int(input())
c = int(input())
l = [a,b,c]
if ((max(l) == c and max(l) == b) or (max(l) == a and max(l) == b) or (max(l) == a and max(l) == c)):
    print(max(l),min(l),max(l),sep="\n")
elif ((min(l) == c and min(l) == b) or (min(l) == a and min(l) == b) or (min(l) == a and min(l) == c)):
    print(max(l),min(l),min(l), sep="\n")
elif a < b < c:
    print(max(l),min(l), b, sep="\n")
elif b < a < c:
    print(max(l),min(l), a, sep="\n")
elif b < c < a:
    print(max(l),min(l), c, sep="\n")
elif c < b < a:
    print(max(l),min(l), b, sep="\n")
elif a < c < b:
    print(max(l),min(l), c, sep="\n")
elif c < a < b:
    print(max(l),min(l), b, sep="\n")
</code>

Код:

l = list(map(int, (input() for i in range(3))))

print(max(l))
l.remove(max(l))

print(min(l))
l.remove(min(l))

print(l[0])

Для того, чтобы получить 3 числа я использовал замысловатую конструкцию:

list(map(int, (input() for i in range(3))))

Но она полностью идентична 4-ём первым строкам в Вашем коде. Можете её заменить на своё усмотрение.
Для печати элементов я воспользовался теми же функциями, что и Вы:
min и
max.
Но я решил удалять из списка использованные элементы, чтобы не возникало никаких проблем. Это позволило мне сократить код и полностью избавиться от условий.


Как в Python получить название шрифта из файла шрифта?
Как в Python получить название шрифта из файла шрифта?
Код:

from PIL import ImageFont
fnt = ImageFont.truetype(fnt_filename, 14)
print(fnt.getname())

Вывод:

('Arial', 'Regular')

А требуется (просто):

Arial

from PIL import ImageFont

fnt = ImageFont.truetype("arial.ttf", 14)

print(fnt.getname()[0])
Arial


Обращение к элементам итератора
С помощью данной конструкции из xml документа получаю список элементов:

for element in root.iter('P'):
    print element

Как можно обратиться (изменить, удалить) к определённому элементу и его значению из этого списка отдельно, чтобы не менять весь список?
Пробую поменять значение 0-го индекса на 1 так

mylist = list(root.iter('P'))
mylist[0] = '1'
print mylist[0]

выдаёт ошибку

print mylist[0] = '1'
SyntaxError: invalid syntax

Пытаюсь записать изменённое значение обратно в документ

from xml.dom.minidom import *
import xml.etree.ElementTree as ET
import ConfigParser

conf = ConfigParser.RawConfigParser()
conf.read('C:\config.conf')# Путь до файла указывается в конфиге

path = conf.get('Path:', 'path')

xml2 = parse(path)
tree = ET.parse(path)
root = tree.getroot()

xml2 = xml2.getElementsByTagName('P')

P = xml2[0].firstChild.data

mylist = list(root.iter('P'))
mylist[0] = '1'
print mylist[0]
tree.write(path)

myiterator = iter(range(10, 20)) # какой-то итератор для примера

mylist = list(myiterator) #деитурируем
print(mylist)

[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

mylist[1] = 'a' #присваиваем новое значение элементу
print(mylist)

[10, 'a', 12, 13, 14, 15, 16, 17, 18, 19]

UPDATE:
Как выяснилось, автору вопроса нужно внести изменения в элементы разобранного .xml файла.
Для этого не нужно выводить итератор элемента root в какой-то дополнительный список, можно сразу работать с его тегами по приведенному ниже примеру:

for rank in root.iter('rank'):
    new_rank = int(rank.text) + 1
    rank.text = str(new_rank)
    rank.set('updated', 'yes')

tree.write('output.xml')

Этот код, разумеется, нужно модифицировать под свои данные.
Если вы хотите изменить какие-то определенные представители этого тега, и знаете их очередность, например 1-й и 5-й, то можно изменить код так:

i=1
for elem in root.iter('P'):
    if i in [1,5]: #1-й и 5-й
        elem.text = '1'
        elem.set('updated', 'yes')
    i+=1

tree.write('output.xml')


Выдает ошибку "single positional indexer is out-of-bounds" при при проверке однородных данных
Есть датафрейм:

import pandas as pd

d = {'Id':[14038.0, 15053.0, 4765.0, 10783.0, 12915.0,5809.0, 11993.0, 5172.0, 10953.0, 11935.0,7917.0],
        'Square':[48.0, 65.7, 44.9, 39.6, 80.4,53.4, 80.3, 64.5, 53.8, 64.7, 212.9],
        'LifeSquare':[29.4, 40.0, 29.2, 23.8, 46.7,52.7,0 ,0 , 52.4, 0, 211.2]}
df = pd.DataFrame(d)

Задача - Скорректировать параметр LifeSquare перед обучением модели.
Написал функцию для отбора ближайших подобных чисел:

def square_correction(data):
    item = 'LifeSquare'
    valid = data.loc[~((data[item] > data['Square'] * 0.8) |\
                       (data[item] < data['Square'] * 0.3)|\
                       (data[item]).isna())]
    invalid = data.loc[(data[item] > data['Square'] * 0.8) |\
                       (data[item] < data['Square'] * 0.3)|\
                       (data[item]).isna()]

    best_feature, item_by_best_feature = best_params(valid, item)

    for i in range(0, len(invalid[item])):
        flat_id = invalid[item].index[i]
        best_feature_meaning = invalid[best_feature][flat_id]

        bigger = valid.loc[(valid[best_feature] >= best_feature_meaning)].reset_index().iloc[0]
        smoller = valid.loc[(valid[best_feature] <= best_feature_meaning)].reset_index().iloc[-1]

        difference_up  = (bigger[best_feature] - data[best_feature][flat_id])
        difference_down = (data[best_feature][flat_id] - smoller[best_feature])

        text = f'flat id:{flat_id}. {item} was changed. {i+1} of {len(invalid[item])} done.'
        if  difference_up ==  difference_down:
            print(text)
            data[item][flat_id] = item_by_best_feature[best_feature_meaning]
        elif not difference_up >=  difference_down:
            print(text)
            data[item][flat_id] = bigger[item]
        else:
            print(text)
            data[item][flat_id] = smoller[item]

    print(f'best feature: {best_feature}. {len(invalid)} rows was changed.')
    return data

запускаем функцию:

df = square_correction(df)

Всё идёт нормально до последней строчки, где jupyter notebook выдает ошибку:

IndexError: single positional indexer is out-of-bounds

Почему ему одно наблюдение из всех так не нравится?
P.S. На учебном датафрейме (10000 наблюдений) выдаёт ту же ошибку:

IndexError                                Traceback (most recent call last)
<ipython-input-17-d4ceb1216100> in <module>
----> 1 data = square_correction(data)

<ipython-input-16-c8f2bf3d18d3> in square_correction(data)
     20
     21
---> 22         bigger = valid.loc[(valid[best_feature] >= best_feature_meaning)].reset_index().iloc[0]
     23         smoller = valid.loc[(valid[best_feature] <= best_feature_meaning)].reset_index().iloc[-1]
     24

~/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py in __getitem__(self, key)
   1498
   1499             maybe_callable = com.apply_if_callable(key, self.obj)
-> 1500             return self._getitem_axis(maybe_callable, axis=axis)
   1501
   1502     def _is_scalar_access(self, key):

~/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py in _getitem_axis(self, key, axis)
   2228
   2229             # validate the location
-> 2230             self._validate_integer(key, axis)
   2231
   2232             return self._get_loc(key, axis=axis)

~/anaconda3/lib/python3.7/site-packages/pandas/core/indexing.py in _validate_integer(self, key, axis)
   2137         len_axis = len(self.obj._get_axis(axis))
   2138         if key >= len_axis or key < -len_axis:
-> 2139             raise IndexError("single positional indexer is out-of-bounds")
   2140
   2141     def _getitem_tuple(self, tup):

IndexError: single positional indexer is out-of-bounds

Похоже у вас бывают случаи когда
valid.loc[(valid[best_feature] >= best_feature_meaning)] возвращает пустой DataFrame, у которого вообще нет строк и, соответственно,
valid.loc[(valid[best_feature] >= best_feature_meaning)].reset_index().iloc[0] выдает ошибку.
Воспроизведение ошибки:

In [276]: pd.DataFrame().iloc[0]
...
skipped
...
IndexError: single positional indexer is out-of-bounds


TypeError: 'module' object is not callable при вызове zipfile

import os
import time

# 1. Файлы и каталоги, которые необходимо скопировать, собираются в список.
source = ['"C:\\My Documents"', 'C:\\Code']
# Заметьте, что для имён, содержащих пробелы, необходимо использовать
# двойные кавычки внутри строки.

# 2. Резервные копии должны храниться в основном каталоге резерва.
target_dir = 'E:\\Backup' # Подставьте тот путь, который вы будете использовать.

# 3. Файлы помещаются в zip-архив.
# 4. Текущая дата служит именем подкаталога в основном каталоге
today = target_dir + os.sep + time.strftime('%Y%m%d')
# Текущее время служит именем zip-архива
now = time.strftime('%H%M%S')

# Запрашиваем комментарий пользователя для имени файла
comment = input('Введите комментарий --> ')
if len(comment) == 0: # проверяем, введён ли комментарий
    target = today + os.sep + now + '.zip'
else:
    target = today + os.sep + now + '_' + \
      comment.replace(' ', '_') + '.zip'

# Создаём каталог, если его ещё нет
if not os.path.exists(today):
    os.mkdir(today) # создание каталога
print('Каталог успешно создан', today)

# 5. Используем команду "zip" для помещения файлов в zip-архив
zip_command = "zip -qr {0} {1}".format(target, ' '.join(source))

# Запускаем создание резервной копии
if os.system(zip_command) == 0:
    print('Резервная копия успешно создана в', target)
else:
    print('Создание резервной копии НЕ УДАЛОСЬ')

Выполняю задание из книги «A Byte of Python», и там, после этого кода, без примеров, сказано:

Напишите этот код с использованием модуля zipfile вместо

os.system.

И я пишу, импортировал модуль zipfile, и, вместо
os.system, добавил
zipfile.
Выходит эта ошибка:

Каталог успешно создан D:\backup5\20190715
Traceback (most recent call last):
  File "back5.py", line 26, in <module>
    if zipfile(zip_command) == 0:
TypeError: 'module' object is not callable

Как я понял, я неправильно использую модуль zipfile.

import os
import time
# В задании которуе я выполняю, не импортируют zipfile
import zipfile

# 1. Файлы и каталоги, которые необходимо скопировать
source = ['C:\\surprise']
# Путь резервных копий
target_dir = 'D:\\backup5'

# Текущая дата служит именем подкаталога в основном каталоге
today = target_dir + os.sep + time.strftime('%Y%m%d')

# Текущее время служит именем для zip-файла
now = time.strftime('%H%M%S')

# Запрашиваем комментарий пользователя для имени файла
comment = input('Введите комментарий ==> ')
if len(comment) == 0:
    target = today + os.sep + now + '.zip'
else:
    target = today + os.sep + now + '_' + \
        comment.replace(' ', '_') + '.zip'

# Создание каталога
if not os.path.exists(today):
    os.mkdir(today)
print('Каталог успешно создан', today)

# Использование команды zip для помещения файлов в zip-архив
zip_command = 'C:\\gnuwin\\bin\\zip.exe -qr {0} {1}'.format(target, ' '.join(source))

# Запускаем создание резервной копии
# В задании, вместо "zipfile", написано "os.system"
if zipfile(zip_command) == 0:
    print('Резервная копия успешно создана в ', target)
else:
    print('Создание резервной копии не удалось')

Необходимо использовать метод ZipFile с модуля zipfile. Т.е. "zipfile" - название модуля, обращение через точку "zipfile.ZipFile" вызывает метод с указанного модуля
UPD: Исправил логику в коде, должно работать, но возможны некоторые синтаксические ошибки, так как писал вне редактора
<code>
import os
import time
import zipfile

def zipdir(path, ziph):
    for root, dirs, files in os.walk(path):
        for file in files:
            ziph.write(os.path.join(root, file))

if __name__ == '__main__':
    source = 'C:\\surprise'
    target_dir = 'D:\\backup5'

    now = time.strftime('%H%M%S')
    today = os.path.join(*[target_dir, time.strftime('%Y%m%d')])

    comment = input('Введите комментарий ==> ')
    if len(comment) == 0:
       target = os.path.join(*[today, now + '.zip'])
    else:
        target = os.path.join(*[today, now + '_' + \
        comment.replace(' ', '_') + '.zip'])

    if not os.path.exists(today):
        os.mkdir(today)
        print('Каталог успешно создан', today)

    try:
        zipf = zipfile.ZipFile(target, 'w', zipfile.ZIP_DEFLATED)
        zipdir(source, zipf)
        zipf.close()
        print('Резервная копия успешно создана в ', target)
    except:
        print('Создание резервной копии не удалось')
</code>


AttributeError: 'tuple' object has no attribute 'introduce'
Есть два объекта, при передаче их в
for и вызове метода класса, в терминал выкидывается ошибка -
AttributeError: 'tuple' object has no attribute 'introduce'. С чем это может быть связано?

class Personal_Data:
       def __init__(self, name, surname, phone_number):
           self.name = name
           self.surname = surname
           self.phone_number = phone_number

       def introduce(self):
           print("Имя: {0}, Фамилия: {1}, Номер телефона       {2}".format(self.name, self.surname, self.phone_number))

Vasiliy = Personal_Data('Vasiliy', 'Valakas', '88005553535'),
Ivan = Personal_Data('Ivan', 'Ivanov', '88005553535')
members = [Vasiliy, Ivan]

print("Что можно сделать: Посмотреть контакты (наберите 'контакты'), Добавить новый контакт ('добавить'), Удалить контакт ('удалить')")

void = input("Что будем делать --> ")
if void != void.lower():
  void = void.lower() # Если в строке есть символы с верхним регистром, то они переводятся в нижний

if void == 'контакты':
  for member in members:
    member.introduce()

Ошибка вызвана запятой в конце следующей строки:

Vasiliy = Personal_Data('Vasiliy', 'Valakas', '88005553535'),

Пример:

In [133]: a = 1,

In [134]: a
Out[134]: (1,)

In [135]: type(a)
Out[135]: tuple


Загрузить картинку с помощью opencv
У меня есть просчитанная нейросеть. Я хочу с помощью opencv брать кадры из видео, прогонять их через нейросеть и выводить результат.

cap = cv2.VideoCapture("C:\snow.mp4")
while(True):
    ret, frame = cap.read()
    cv2.imshow('Video', frame)
    # Загружаем изображение
    img_path = frame
    img = image.load_img(img_path, target_size=(200, 200))

# Преобразуем изображением в массив numpy
x = image.img_to_array(img)

# Инвертируем и нормализуем изображение
x /= 255
x = np2.expand_dims(x, axis=0)
prediction = mod.predict(x)
prediction = np.argmax(prediction[0])
print(classes[prediction])

print(frame)
#print(gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
    break

в итоге выходит ошибка

    AttributeError                            Traceback (most recent call last)
~\Anaconda3\envs\q\lib\site-packages\PIL\Image.py in open(fp, mode)
   2655     try:
-> 2656         fp.seek(0)
   2657     except (AttributeError, io.UnsupportedOperation):

AttributeError: 'numpy.ndarray' object has no attribute 'seek'

During handling of the above exception, another exception occurred:

AttributeError                            Traceback (most recent call last)
<ipython-input-15-b6889e26cf03> in <module>
      5     # Загружаем изображение
      6     img_path = frame
----> 7     img = image.load_img(img_path, target_size=(200, 200))
      8
      9     # Преобразуем изображением в массив numpy

~\Anaconda3\envs\q\lib\site-packages\keras_preprocessing\image\utils.py in load_img(path, grayscale, color_mode, target_size, interpolation)
    108         raise ImportError('Could not import PIL.Image. '
    109                           'The use of `load_img` requires PIL.')
--> 110     img = pil_image.open(path)
    111     if color_mode == 'grayscale':
    112         if img.mode != 'L':

~\Anaconda3\envs\q\lib\site-packages\PIL\Image.py in open(fp, mode)
   2656         fp.seek(0)
   2657     except (AttributeError, io.UnsupportedOperation):
-> 2658         fp = io.BytesIO(fp.read())
   2659         exclusive_fp = True
   2660

AttributeError: 'numpy.ndarray' object has no attribute 'read'

как корректно взять кадр из видео?

после строки:

ret, frame = cap.read()

в переменной
frame уже находится 3D (если видео цветное) Numpy Array. Поэтому нет смысла пытаться открыть
frame как файл с изображением.
Вместо этого измените размер картинки:

img = cv2.resize(frame, (200, 200))


Как можно определить победителя не прибегая к множеству if...else? Алгоритм приоритета выбора в игре камень-ножницы-бумага [закрыт]

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

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

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

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

Столкнулся с проблемой при написании игры "Камень,ножницы,бумага".Не знаю как грамотно выставить приоритет чтоб камень выигрывал у ножниц,ножницы у бумаги,а бумага у камня.При реализации следующим методом:
<code>
array = ['камень','ножницы','бумага']
array[0] > array[1] > array[2] > array[0]
</code>
Камень выигрывал абсолютно у всех.Через кучу if..else реализовывать не буду!Подскажите,как правильно тут поступить?

На скорую руку, я бы попробовал так:

from itertools import cycle

array = ['бумага', 'ножницы','камень']
mycycle = cycle(array)

def testit(a, b):
    while next(mycycle) != a:
        pass
    if b == next(mycycle):
        print(f"{b} бьёт {a}")
    else:
        print(f"{a} бьёт {b}")

проверяем:

testit("ножницы", "камень")

камень бьёт ножницы

testit("бумага", "камень")

бумага бьёт камень


Оператор is и кортежи
Возник вопрос, почему происходит именно так:

>>> (1, 2) is (1, 2)
False
>>> () is ()
True

Ведь, кортеж - это неизменяемый тип данных, и два одинаковых кортежа должны быть одним объектом в оперативной памяти.
Так например:

>>> 1 is 1
True
>>> 'str' is 'str'
True

Самое главное:

Два одинаковых объекта не обязаны иметь одинаковый адрес в памяти, но
  это возможно. В Python 3.7, благодаря новой оптимизации AST, иногда так и происходит, в версиях ниже - нет. Полагаться на это поведение ни в коем случае нельзя.

Теперь подробнее...
Для начала стоит сказать, что это зависит от конкретной версии Python (точнее CPython).
Python 3.7:

print((1, 2) is (1, 2))  # True

Python 3.6:

print((1, 2) is (1, 2))  # False

Для того, чтобы понять некоторые различия в версиях, предлагаю дизассемблировать этот код.
Начнём со старой версии (3.6):

print(dis.dis('(1, 2) is (1, 2)'))
  1           0 LOAD_CONST               2 ((1, 2))
              2 LOAD_CONST               3 ((1, 2))
              4 COMPARE_OP               8 (is)
              6 RETURN_VALUE

4-ая колонка с числами (
2, 3, 8) - это
opargs (аргументы операции). Обратите внимание на то, что команда одна и та же (
LOAD_CONST), данные одни и те же (
(1, 2)), но эти данные являются разными аргументами при операции.
Следовательно, они будут разными объектами в памяти (но я немного сомневаюсь насчёт этого утверждения)
Давайте взглянем на список констант скомпилированного кода, чтобы точно в этом убедиться:

code = compile('(1, 2) is (1, 2)', '<string>', 'single')
print(code.co_consts)
(1, 2, None, (1, 2), (1, 2))

Кортеж
(1, 2) встречается 2 раза, то есть это разные объекты.

Новая версия (3.7):

print(dis.dis('(1, 2) is (1, 2)'))
  1           0 LOAD_CONST               0 ((1, 2))
              2 LOAD_CONST               0 ((1, 2))
              4 COMPARE_OP               8 (is)
              6 RETURN_VALUE

Уже на этом этапе видно, что наш кортеж является одним и тем же аргументом в операции.
Подтвердим наши догадки, взглянув на константы:

code = compile('(1, 2) is (1, 2)', '<string>', 'single')
print(code.co_consts)
((1, 2), None)

Как видим, объект один, поэтому и адрес в памяти один.
Результат в новой версии отличается из-за перемещения некоторых оптимизаций байт-кода в новый оптимизатор AST.
Выдержка из нововведений:

Constant folding has been moved from the peephole optimizer to the new
  AST optimizer, which is able perform optimizations more consistently.
  (Contributed by Eugene Toder and INADA Naoki in bpo-29469 and
  bpo-11549.)

Поэтому скомпилированный код очень сильно отличается от интерактивного сеанса:
Интерактивный режим:

>>> x = (1, 2)
>>> y = (1, 2)
>>> print(x is y)
False
>>> print((3, 4) is (3, 4))
True

Скомпилированная версия:

x = (1, 2)
y = (1, 2)
print(x is y)            # True
print((3, 4) is (3, 4))  # True

Подобные оптимизации касаются также других объектов.

Также в разных версиях отличается результат следующих инструкций:

x, y = 257, 257
x is y
-6 is -6

Давние особенности
Тестирую Python 3.7 в интерактивном режиме.
Сначала немного примеров:
№1:

>>> x = 257
>>> y = 257
>>> x is y
False

№2:

>>> x = 256
>>> y = 256
>>> x is y
True

№3:

>>> x = -6
>>> y = -6
>>> x is y
False

№4:

>>> x = -5
>>> y = -5
>>> x is y
True

№5

>>> x = 'Loremipsumdolorsitametconsecteturadipiscingelit'
>>> y = 'Loremipsumdolorsitametconsecteturadipiscingelit'
>>> x is y
True

№6

>>> x = 'Hi!'
>>> y = 'Hi!'
>>> x is y
False

Из этих примеров видно, что Python кэширует числа в промежутке [-5; 256].
Пруф
Также он кэширует простые строки.
Пруф
Но если запускать скомпилированный код, то в Python 3.7 все примеры вернут
True.

На основании примеров выше, хочу предупредить, что сравнивать любые данные оператором
is ни в коем случае нельзя. Используйте для этого только оператор
==.


Приведение к верхнему регистру ключей словарей
есть некий словарь
{'-f':'200','-p':'good'}
надо привести ключи к верхнему регистру, и при возможности перезаписать его в ту же переменную

a={'-a':'12','-v':'132'}
print(a.keys())
for i in a.keys():
    print(i)

Код:

d = {
    '-f': '200',
    '-p': 'good',
}

d = {k.upper(): d[k] for k in d}
print(d)

stdout:

{'-F': '200', '-P': 'good'}

Я решил воспользоваться генератором словарей для этой задачи.
Итерируя словарь, возвращаются его ключи, которые приводятся к верхнему регистру с помощью метода
upper() и принимают значение из исходного словаря.


Не работает swap - поменять местами минимальный и максимальный элементы
Не могу понять, почему не работает обмен переменных.
Само задание:

В списке все элементы различны. Поменяйте местами минимальный и
  максимальный элемент этого списка.

a = [int(s) for s in input().split()]
a[a.index(min(a))], a[a.index(max(a))] = a[a.index(max(a))], a[a.index(min(a))]
print(' '.join([str(s) for s in a]))

При вводе:
1 5 4 3 2, обмен не происходит. Помогите понять, почему?

Разбор полётов:
Выражение

a, b = c, d

выполняется в следующем порядке - сначала вычисляется слева направо всё в правой части от знака
=, потом вычисленные значения присваиваются переменным из левой части - тоже слева направо:

c
d
a
b

Смотрим, что происходит:

(c): ==>  результат:
5
(d): ==>  результат:
1
(a): ==>

In [48]: a.index(min(a))
Out[48]: 0

In [49]: a[0] = 5

In [50]: a
Out[50]: [5, 5, 4, 3, 2]

(b): ==>

In [51]: a.index(max(a))
Out[51]: 0

In [52]: a[0] = 1

In [53]: a
Out[53]: [1, 5, 4, 3, 2]

После шага
3:

a == [5, 5, 4, 3, 2]

Соответственно, на четвертом шаге
a.index(max(a)) вернет
0 - первый встретившийся максимум.
Далее вы присваиваете
a[0] вычисленный заранее (шаг
2) минимум
1. Вуаля - все вернулось на свои места.

Чтобы разрешить данный конфликт, надо сохранить индексы минимума и максимума, как это показано в ответе @S.Nick.

Интересная деталь: ваше решение отработает правильно если в исходном списке максимальный элемент встречается до минимального:

In [57]: a = [4, 3, 5, 1, 2]

In [58]: a[a.index(min(a))], a[a.index(max(a))] = a[a.index(max(a))], a[a.index(min(a))]

In [59]: a
Out[59]: [4, 3, 1, 5, 2]


перебор словаря в python [закрыт]

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

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

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

Как перебрать словарь чтобы выходило количество элементов в словаре
<code>
name = {'Имена': {
    'Максим',
    'Чаплин',
    'Вика',
    'Шрек'
}
</code>

Внутренные скобки должны быть или обыкновенными (для кортежи) или квадратными (для списка):

In[4]: name = {'Имена': ('Максим', 'Чаплин', 'Вика', 'Шрек',) }
In[5]: number_of_elements = len(name['Имена'])

Так как ключ -
'Имена', то
name['Имена'] - его значение, т.е. кортеж

                  ('Максим', 'Чаплин', 'Вика', 'Шрек',)

Применяя функцию
len() мы получим количество элементов кортежи.
Тест:

In[6]: print(number_of_elements)

Вывод:

4


Добавление элемента в список на Python
В Python, при добавлении элемента в список с помощью append, я ожидаю увидеть нечто вроде:

['31955189', '38274957']

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

def get(item, field):
  result = []
  for items in field:
    popitka = int(todos2['response'][item][items])
    result.append(popitka)
  return result
second = []
for i, item in enumerate(todos2['response']):
  second.append(get(i, ['id']))

у меня выходит следующее:

['[31955189]', '[38274957]', '[40975081]']

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

second = tuple(second[0]) #Нужно для каждого добавленного элемента.
#Можно через for, но у меня есть сомнения в правильности этого действия.
print(second)
#Result: (20834091,)

Но выполнять эту неприятную процедуру нужно для каждого добавленного элемента.
А вот так это выглядит без извращений, но мне это не подходит (выхлоп мне не нравится):

second = tuple(second)
print(second)
print(second[0])
#Result: ['[31955189]', '[38274957]', '[40975081]']
#Result: [31955189]

Быть может я просто запарился и проблемы нет?

Давайте разбираться.
В итоговый список
second вы добавляете результаты функции
get. Функция
get за каждый вызов возвращает
result. А
result - это список. Логично, что в итоге у вас и получится список списков.
Решить проблему можно если просто заменить в последней строчке
second.append на
second.extend тогда у вас вместо вставки списка
result в
second он будет просто дописываться в конец.
Но вообще, кажется, что ваше решение очень переусложнено и задачу можно решить вообще в одну строчку:

second = [int(item['id']) for item in todos2['response']]

Проверить не могу, так как вы не привели пример содержимого
todos2, но, кажется, это должно работать.


sums = {'suma':
              [ 274.6243,
                140.6846,
               1168.3088,
                657.7995,
                  7.7,
               # ...
             ]
       }

print(sum(sums['suma']))
2249.1171999999997

Update
Начнем с того, что строка
sums={'suma': 274.6243, 140.6846, 1168.3088, 657.7995, 7.7}
Выдает ошибку
SyntaxError: invalid syntax
Словари в Python - неупорядоченные коллекции произвольных объектов с доступом по ключу.
Данные в словаре хранятся в формате
ключ: значение.
Доступ к элементу словаря, осуществляется как же как доступ к элементу списка,
только в качестве индекса указывается ключ.

d1 = {"key1": "value1", "key2": "value2"}
d1["key1"]  # ---> 'value1'

Словарь может хранить вложенные словари.
Словарь может хранить в качестве значений объекты любого типа (heterogeneous).
Ключ в словаре — immutable тип, может быть
строкой,
целым числом,
float либо
кортежем,
состоящим из указанных типов.
С помощью словарей можно хранить структурированную информацию в виде записей:

myDict = {'key1': {'suma': [ 274.6243, 140.6846, 1168.3088, 657.7995, 7.7, ]},
          'key2': {'suma': [ 274.6243, 140.6846, 1168.3088, 657.7995, 7.7, ]},
          'key3': {'suma': [ 274.6243, 140.6846, 1168.3088, 657.7995, 7.7, ]},
         }

for k, v in myDict.items():
    print("{} : {}".format(k, sum(v['suma'])))

key1 : 2249.1171999999997
key2 : 2249.1171999999997
key3 : 2249.1171999999997


Не могу установить pyinstaller, испробовал всё, но в итоге выдаёт эту ошибку
<code>
ERROR: Complete output from command 'c:\users\днс\appdata\local\programs\pyt
hon\python37-32\python.exe' 'c:\users\днс\appdata\local\programs\python\python37
-32\lib\site-packages\pip\_vendor\pep517\_in_process.py' prepare_metadata_for_bu
ild_wheel 'C:\Users\BD1F~1\AppData\Local\Temp\tmp5o3wqo8g':
    ERROR: running dist_info
    creating C:\Users\BD1F~1\AppData\Local\Temp\pip-install-4w77ap2p\pyinstaller
\pip-wheel-metadata\PyInstaller.egg-info
    writing C:\Users\BD1F~1\AppData\Local\Temp\pip-install-4w77ap2p\pyinstaller\
pip-wheel-metadata\PyInstaller.egg-info\PKG-INFO
    writing dependency_links to C:\Users\BD1F~1\AppData\Local\Temp\pip-install-4
w77ap2p\pyinstaller\pip-wheel-metadata\PyInstaller.egg-info\dependency_links.txt

writing entry points to C:\Users\BD1F~1\AppData\Local\Temp\pip-install-4w77a
p2p\pyinstaller\pip-wheel-metadata\PyInstaller.egg-info\entry_points.txt
    writing requirements to C:\Users\BD1F~1\AppData\Local\Temp\pip-install-4w77a
p2p\pyinstaller\pip-wheel-metadata\PyInstaller.egg-info\requires.txt
    writing top-level names to C:\Users\BD1F~1\AppData\Local\Temp\pip-install-4w
77ap2p\pyinstaller\pip-wheel-metadata\PyInstaller.egg-info\top_level.txt
    writing manifest file 'C:\Users\BD1F~1\AppData\Local\Temp\pip-install-4w77ap
2p\pyinstaller\pip-wheel-metadata\PyInstaller.egg-info\SOURCES.txt'
    reading manifest file 'C:\Users\BD1F~1\AppData\Local\Temp\pip-install-4w77ap
2p\pyinstaller\pip-wheel-metadata\PyInstaller.egg-info\SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    Error in sitecustomize; set PYTHONVERBOSE for traceback:
    SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xe4 in positio
n 0: invalid continuation byte (sitecustomize.py, line 7)
    no previously-included directories found matching 'bootloader\build'
    no previously-included directories found matching 'bootloader\.waf-*'
    no previously-included directories found matching 'bootloader\.waf3-*'
    no previously-included directories found matching 'bootloader\waf-*'
    no previously-included directories found matching 'bootloader\waf3-*'
    no previously-included directories found matching 'bootloader\_sdks'
    no previously-included directories found matching 'bootloader\.vagrant'
    warning: no previously-included files found matching 'bootloader\.lock-waf*'
    no previously-included directories found matching 'doc\source'
    no previously-included directories found matching 'doc\_build'
    warning: no previously-included files matching '*.tmp' found under directory
 'doc'
    warning: no files found matching 'news\_template.rst'
    no previously-included directories found matching 'news'
    no previously-included directories found matching 'old'
    no previously-included directories found matching 'scripts'
    no previously-included directories found matching 'tests\scripts'
    no previously-included directories found matching '.github'
    warning: no previously-included files found matching '.*'
    warning: no previously-included files found matching '*.yml'
    warning: no previously-included files found matching '*~'
    warning: no previously-included files found matching '.directory'
    writing manifest file 'C:\Users\BD1F~1\AppData\Local\Temp\pip-install-4w77ap
2p\pyinstaller\pip-wheel-metadata\PyInstaller.egg-info\SOURCES.txt'
    creating 'C:\Users\BD1F~1\AppData\Local\Temp\pip-install-4w77ap2p\pyinstalle
r\pip-wheel-metadata\PyInstaller.dist-info'
    error: invalid command 'bdist_wheel'
    ----------------------------------------
ERROR: Command "'c:\users\днс\appdata\local\programs\python\python37-32\python.e
xe' 'c:\users\днс\appdata\local\programs\python\python37-32\lib\site-packages\pi
p\_vendor\pep517\_in_process.py' prepare_metadata_for_build_wheel 'C:\Users\BD1F
~1\AppData\Local\Temp\tmp5o3wqo8g'" failed with error code 1 in C:\Users\BD1F~1\
AppData\Local\Temp\pip-install-4w77ap2p\pyinstaller
</code>

Переустановил Python в папку без русских символов и всё заработало.


return и переменные в python3(Вопрос чуть сложнее чем кажется)
как мне это решить?
Есть цикл, в начале он запускает функцию(из другого скрипта)

def upr(level):
    up = ""
    right = ""
    if level == debug_zone_1:
        up = 18
        right = 1
    elif level == debug_zone_2:
        up = 30
        right = 1
    else:
        pass
    return up, right

По идее он должен вернуть в цикл переменные up и right но условие ниже

if pos >= up:

Свято уверяет меня в том что переменная up не объявлена:

  File "C:\Py\Cube\debug.py", line 100, in <module>
  if pos >= up:
  NameError: name 'up' is not defined

Не требуется дополнительная переменная, как в предыдущем ответе. Можно оба значения сразу присвоить двум нужным без всяких индексов:
<code>
a, b = upr(1)
</code>


Можно ли сократить кол-во запросов к БД
<code>
from mainapp.models import Tag
def filter_tags(tags_string):
    tags = list(map(lambda x: x.lower().strip(), tags_string.split(',')))
    done_tags = []
    for tag in tags:
        if tag:
            done_tags.append(tag)
    return done_tags

def string_to_tags(tags_string: str):
    tags = filter_tags(tags_string)  # возвращает массив строк
    tags_l = []
    for tag in tags:
        tags_l.append(Tag.objects.get_or_create(name=tag)[0])  # получение существующих тегов или создание не достающих TODO: затратно

    return tags_l
</code>
Можно ли в string_to_tags() обойтись только одним запросом к БД создавая не достающие теги?

Tag.objects.bulk_create([Tag(name=tag) for tag in tags], ignore_conflicts=True)


Выборка данных из вложенного словаря
Есть файл
json. Мне необходимо забрать из него все записи по ключу
vintage и значению
name. Перепробовал все возможные способы, но не могу понять, как правильно это сделать?
Вот пример файла:

{
  "explore_vintage": {
    "market": {
      "country": "ru",
      "currency": {
        "code": "RUB",
        "name": "Russian Rouble",
        "prefix": null,
        "suffix": "₽"
      }
    },
    "records_matched": 9114,
    "matches": [
      {
        "vintage": {
          "id": 156240236,
          "seo_name": "kvareli-akhasheni-red-akhasheni-krasnoe-kakheti-2013",
          "name": "Kvareli Akhasheni Red (Ахашени Красное) 2013",
          "statistics": {
            "status": "Normal",
            "ratings_count": 37,
            "ratings_average": 4.6,
            "labels_count": 409
          },
          "image": {
            "location": "//images.vivino.com/labels/M-DRD7hCQfK60EBrmnbXYA.jpg",
            "variations": {
              "large": "//images.vivino.com/thumbs/M-DRD7hCQfK60EBrmnbXYA_375x500.jpg",
              "medium": "//images.vivino.com/thumbs/M-DRD7hCQfK60EBrmnbXYA_150x200.jpg",
              "medium_square": "//images.vivino.com/thumbs/M-DRD7hCQfK60EBrmnbXYA_150x150.jpg",
              "small_square": "//images.vivino.com/thumbs/M-DRD7hCQfK60EBrmnbXYA_80x80.jpg"
            }

Воспользуйтесь модулем Pandas:

import pandas as pd

df = pd.io.json.json_normalize(data['explore_vintage']['matches'])

результат:

In [44]: df
Out[44]:
   vintage.id                   vintage.image.location           vintage.image.variations.large  \
0   156240236  //images.vivino.com/labels/M-DRD7hCQ...  //images.vivino.com/thumbs/M-DRD7hCQ...

           vintage.image.variations.medium   vintage.image.variations.medium_square  ...  \
0  //images.vivino.com/thumbs/M-DRD7hCQ...  //images.vivino.com/thumbs/M-DRD7hCQ...  ...

                          vintage.seo_name vintage.statistics.labels_count vintage.statistics.ratings_average  \
0  kvareli-akhasheni-red-akhasheni-kras...                             409                                4.6

   vintage.statistics.ratings_count  vintage.statistics.status
0                                37                     Normal

[1 rows x 12 columns]

первая строка:

In [45]: df.loc[0]
Out[45]:
vintage.id                                                              156240236
vintage.image.location                    //images.vivino.com/labels/M-DRD7hCQ...
vintage.image.variations.large            //images.vivino.com/thumbs/M-DRD7hCQ...
vintage.image.variations.medium           //images.vivino.com/thumbs/M-DRD7hCQ...
vintage.image.variations.medium_square    //images.vivino.com/thumbs/M-DRD7hCQ...
vintage.image.variations.small_square     //images.vivino.com/thumbs/M-DRD7hCQ...
vintage.name                              Kvareli Akhasheni Red (Ахашени Красн...
vintage.seo_name                          kvareli-akhasheni-red-akhasheni-kras...
vintage.statistics.labels_count                                               409
vintage.statistics.ratings_average                                            4.6
vintage.statistics.ratings_count                                               37
vintage.statistics.status                                                  Normal

можно отфильтровать все столбцы связанные с
image:

In [46]: cols = df.columns[~df.columns.str.contains("image")]

In [47]: df[cols]
Out[47]:
   vintage.id                             vintage.name                         vintage.seo_name  \
0   156240236  Kvareli Akhasheni Red (Ахашени Красн...  kvareli-akhasheni-red-akhasheni-kras...

   vintage.statistics.labels_count  vintage.statistics.ratings_average  vintage.statistics.ratings_count  \
0                              409                                 4.6                                37

  vintage.statistics.status
0                    Normal

In [48]: df[cols].loc[0]
Out[48]:
vintage.id                                                          156240236
vintage.name                          Kvareli Akhasheni Red (Ахашени Красн...
vintage.seo_name                      kvareli-akhasheni-red-akhasheni-kras...
vintage.statistics.labels_count                                           409
vintage.statistics.ratings_average                                        4.6
vintage.statistics.ratings_count                                           37
vintage.statistics.status                                              Normal
Name: 0, dtype: object


Как грамотно починить "сломанные" / переставшие работать модули Python?
Все чаще появляются вопросы о "сломанных" / несовместимых / переставших работать модулях в Python и о сопутствующих этому ошибках:

ImportError: DLL load failed: ...

ImportError: Could not import ...

UnsatisfiableError: The following specifications were found to be in conflict: ...

и много других...
Описанные выше проблемы чаще всего возникают вследствие:

установки нового модуля
обновления Python
обновления модуля / модулей
обновления / изменения в VirtualEnv (виртуальной среде Python)
неправильного использования
conda - например если использовать созданное по умолчанию виртуальное окружение
base (оно используется
conda для управления остальными вирт. окружениями), вместо явно созданного нового виртуального окружения

Вопрос:

как исправить данные проблемы и как избежать их появления в будущем?

После долгого "хождения по граблям" (как под UNIX* так и под Windows) я остановился на следующем подходе, который меня пока ни разу не подводил.
Основная идея в установке пакета Anaconda и создании независимых виртуальных окружений при помощи менеджера пакетов
conda.
Anaconda проверяет совместимость версий модулей (включая зависимости). Это минимизирует вероятность поломать Python, просто установив или обновив некий модуль(и).
Алгоритм установки Anaconda и создания
VirtualEnv (независимого виртуального окружения Python):

Устанавливаем Anaconda или Miniconda

Installing on Windows
Installing on Linux
Installing on macOS

Обновляем менеджер пакетов
conda (NOTE: чтобы избежать проблем - всегда запускайте
conda из
Anaconda Prompt):

 conda update conda

Никогда "не трогайте" Python, установленный по умолчанию в ОС или установленный другим программным обеспечением (например при установке Oracle Database, устанавливается отдельный Python, который будет использоваться Oracle).
Под
"не трогайте" Python я подразумеваю внесение любых изменений, затрагивающих Python или его модули:

установка новых модулей
обновление Python
обновление модулей

Не утсанавливайте модули в виртуальную среду
base созданную по умолчанию. Устанавливайте модули только в те виртуальные среды, которые вы явно создали (см. следующий пункт -
5). Виртуальное окружение
base - это техническое окружение созданное
conda для управления остальными виртуальными средами. Если не хотите сломать сразу все виртуальные окружения не трогайте
base.

Для каждого более или менее независимого проекта на Python создавайте независимое виртуальное окружение (VirtualEnv). Можно дополнительно создать одно общее окружение для общих целей. В данном примере я создам общее окружение с названием
ml (Machine Learning) для версии
Python 3.7 и основным набором модулей для работы над задачами машинного обучения (с поддержкой Nvidia GPU):

 conda create --name ml python=3.7 anaconda keras-gpu

Для того чтобы запустить
Python /
Jupyter /
iPython / etc. из созданного VirtualEnv можно воспользоваться одним из следующих варантов:

запустить
Anaconda Prompt --> активировать в нём нужное вирт. окружение (
conda activate <env_name>) --> запустить
ipython /
Jupyter-Notebook

использовать CMD / shell скрипт для запуска
ipython из нужного вирт. окружения:

      @echo off
      set conda_dir=%USERPROFILE%\Anaconda3
      set env_name=%1
      if "%env_name%"=="" set env_name=ml
      set env_dir=%conda_dir%\envs\%env_name%
      rem cd %env_dir%
      call %conda_dir%\Scripts\activate.bat %env_dir%
      %env_dir%\Scripts\ipython.exe

  Пример вызова: `c:\bin\ipy_env.cmd ml37`

использовать CMD / shell скрипт для запуска
Jupyter-Notebook из нужного вирт. окружения:

      @echo off
      set env_name=%1
      if "%env_name%"=="" set env_name=ml
      set env_dir=%USERPROFILE%\Anaconda3\envs\%env_name%
      rem cd %env_dir%
      call %USERPROFILE%\Anaconda3\Scripts\activate.bat %env_dir%
      start cmd.exe /k "%USERPROFILE%\Anaconda3\envs\%env_name%\Scripts\jupyter-notebook.exe"

  Пример вызова: `C:\bin\jupyter_env.cmd torch`

для проекта в PyCharm можно в качестве
Project Interpreter указать существующий
Conda Environment

Чтобы установить новый модуль всегда попробуйте сделать это в следующей последовательности:

сначала всегда пробуем найти нужный модуль в репозитори Anaconda по умолчанию

      conda search <module_name>

если модуль найден - устанавливаем его в наш
VirtualEnv (
ml в нашем примере):

      conda install -n ml <module_name>

если модуль не найден, то пытаемся найти данный модуль в репозитории
conda-forge (A community-led collection)

      conda search -c conda-forge <module_name>

если модуль найден - устанавливаем его в наш
VirtualEnv (
ml в нашем примере):

      conda install -c conda-forge -n ml <module_name>

только в том случае, если нужный модуль не найден ни в оригинальном Anaconda репозитории ни в
conda-forge - используем
pip install:

      conda activate ml
      pip install <module_name>

чтобы обновить модуль используйте менеджер пакетов
conda:

 conda update -n ml <module_name>

Полезные ссылки:

Conda Tutorial
Conda Cheat Sheet