小编Aza*_*kov的帖子

mypy:“联合项目没有属性”错误

尝试学习在 Python 中输入提示。鉴于这两个函数:

from typing import Union, TextIO


def myfunc_ok(file: TextIO):
    mydump = file.read()
    print(mydump)


def myfunc_error(file: Union[str, TextIO]):
    mydump = file.read()
    print(mydump)
Run Code Online (Sandbox Code Playgroud)

第一个对 mypy 没问题,但它抱怨第二个有错误

Item "str" of "Union[str, TextIO]" has no attribute "read"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我是否错误地使用了类型提示?(使用 python3.7 和 mypy 0.610,也用 py3.6 测试)

python type-hinting python-3.x mypy

4
推荐指数
1
解决办法
1632
查看次数

从 tkinter 表单返回一个值

我正在使用需要要求用户输入的代码,使用 tkinter 窗口(我没有在代码的其他部分使用 tkinter)。

我的问题是,我只需要使用 tkinter 窗口在按下表单上的“确定”按钮后返回一个值,这也会关闭表单。到目前为止,我可以让它工作的唯一方法是使用全局变量。我已经搜索了其他解决方案,但它们要么不返回值(它们只是打印它),要么不允许传递提示文本。

如果您能提供帮助,请先致谢。

from tkinter import *

def input_text(prompt):

    def ok():
        global ret
        ret = entry.get()
        master.destroy()

    master = Tk()
    lbl = Label(master, text=prompt)
    lbl.pack()
    entry = Entry(master)
    entry.pack()

    entry.focus_set()

    butt = Button(master, text = "OK", width = 10, command = ok)
    butt.pack()

    mainloop()

print("I am here!")
ret=""
input_text("Enter something")

print("ret is:", ret)
Run Code Online (Sandbox Code Playgroud)

tkinter python-3.x

4
推荐指数
1
解决办法
1975
查看次数

如何在sqlalchemy中划分两列

如何使用 sqlalchemy 生成此 SQL

SELECT SUM(click) / SUM(impression) as my_indicator
FROM stats;
Run Code Online (Sandbox Code Playgroud)
session.query(
    func.sum(table.click).label("click"),
    func.sum(table.impression).label("impression"),
    # ??? sum(click) / sum(impression) ???
).group_by(table.type)
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

4
推荐指数
1
解决办法
4879
查看次数

SQLAlchemy PostgreSQL UPSERT 值数组引发 UnsupportedCompilationError

尝试对 PostgreSQL > 9.5 的值数组执行 UPSERT。

尝试像SQLALchemy文档中那样构建语句,但没有解释如何为数组而不是单行执行此操作。insert 语句构建正确,所以我想可以使用 on_conflict_do_update 函数来做到这一点。

有这个代码:

stock_table = Table("stock_history", metadata,
            Column('date', sqlalchemy.types.NVARCHAR(length=255), primary_key=True),
            Column('product_id', sqlalchemy.types.INTEGER(), primary_key=True),
            Column('product_sku', sqlalchemy.types.NVARCHAR(length=255)), 
            Column('on_hand_qty',  sqlalchemy.dialects.postgresql.DOUBLE_PRECISION()),
            Column('available_qty',  sqlalchemy.dialects.postgresql.DOUBLE_PRECISION()),
            Column('output_qty', sqlalchemy.dialects.postgresql.DOUBLE_PRECISION())
        )
stock_today = pandas.read_sql_query(queryStock, odoo_engine)
insert_stmt = sqlalchemy.dialects.postgresql.insert(stock_table).values(stock_today)
upser_stmt = insert_stmt.on_conflict_do_update(
            index_elements=['date', 'product_id'],
            set_=stock_today.to_dict(orient='dict')
        )
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

AttributeError: 'StrSQLCompiler' 对象没有属性 'visit_on_conflict_do_update'

During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "pompeiiETL.py", line 15, in <module>
        pompeiiJobs.runStockJob(dwh_engine, odoo_prod_engine)
      File "/Users/alex/Development/DataLab/pompeii-datalab/pompeiiETL/jobs.py", line 54, in runStockJob
        print(upser_stmt) …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy

3
推荐指数
1
解决办法
2553
查看次数

将列表转换为Python Dataframe中的列

我有一个数据框df,看起来像这样:

CustomerId    Age
1              25
2              18
3              45
4              57
5              34
Run Code Online (Sandbox Code Playgroud)

我有一个名为“价格”的列表,看起来像这样:

Price = [123,345,1212,11,677]
Run Code Online (Sandbox Code Playgroud)

我想将该列表添加到数据框。这是我的代码:

df['Price'] = Price
Run Code Online (Sandbox Code Playgroud)

似乎可行,但是当我打印数据框时,名为“ Price”的字段包含所有元数据信息,例如Name,Type ...以及Price的值。

如何创建一个仅包含“价格”列表值的“价格”列,以便数据框如下所示:

CustomerId    Age   Price
1              25   123
2              18   345
3              45   1212
4              57   11
5              34   677
Run Code Online (Sandbox Code Playgroud)

python metadata list dataframe pandas

3
推荐指数
2
解决办法
1万
查看次数

陷入python中的循环 - 只返回第一个值

我是 Python 的初学者,试图制作一个函数,该函数将使用偶数索引大写所有值,并使用奇数索引小写所有值。

我一直在为只给我第一个值的循环而苦苦挣扎。我也尝试过 while 循环。但是我很好奇是否有办法让它与 for 循环一起工作(我需要在某处使用 '+=1' 吗?)

def func1(x):
    for (a,b) in enumerate (x):
         if a%2 == 0:
              return b.upper()
         else:
              return b.lower()


func1('Testing Testing')

>>>'T'
Run Code Online (Sandbox Code Playgroud)

loops enumerate python-3.x

3
推荐指数
1
解决办法
5814
查看次数

Jupyter 笔记本 - GPU

我正在研究 Jupyter Notebook,并希望通过使用 Google GPU 使其运行得更快。我已经进行了一些研究并找到了解决方案,但它对我不起作用。

解决方案是:

“最简单的方法是使用连接到本地运行时,然后选择硬件加速器作为 GPU,如Google Colab 免费 GPU 教程中所示。”

我确实设法将 googe colab 连接到 jupyter,但是当我尝试将硬件加速器切换到 GPU 时,我与 jupyter 笔记本断开了连接......在教程中,他似乎能够连接到 jupyter 并且仍然使用 GPU,但我不能。

有谁知道如何解决这个问题?

python gpu jupyter-notebook

3
推荐指数
1
解决办法
7109
查看次数

Python3 `builtins` 并不总是 `__builtins__`

我提出了这个想法如何制作跨模块变量?在 python3 中运行。并且懒得使用变量__builtins__而不是模块builtins。这应该没有区别,因为:

# file spam.py:
import builtins
print (builtins is __builtins__)
print (id(builtins))
print (id(__builtins__))
Run Code Online (Sandbox Code Playgroud)

这是它变得有趣的时候:builtins不是__builtins__在导入时:

$ python3 spam.py 
True
140598001743336
140598001743336

$ python3 -c 'import spam'
False
139755426543080
139755426520904
Run Code Online (Sandbox Code Playgroud)

有谁知道会发生什么?

(给定页面上的评论提到“__builtins__是 CPython 的特性,你真的不应该使用它”,但我很好奇......)

python python-3.x

3
推荐指数
1
解决办法
350
查看次数

使用 txt 中的指定标签从 dict 构建数据框

我想制作一个带有定义标签的数据框。不知道如何告诉熊猫从列表中获取标签。希望有人能帮忙

import numpy as np
import pandas as pd


df = []
thislist = []

thislist = ["A","D"]
thisdict =  {
             "A": [1, 2, 3],
             "B": [4, 5, 6],
             "C": [7, 8, 9],
             "D": [7, 8, 9]
            }

df = pd.DataFrame(data= thisdict[thislist])  # <- here is my problem
Run Code Online (Sandbox Code Playgroud)

我想得到这个:

df = A   D
     1   7
     2   8
     3   9
Run Code Online (Sandbox Code Playgroud)

python dataframe python-3.x pandas

3
推荐指数
1
解决办法
145
查看次数

将 Python 类转换为 Numpy 数组

我可以将 python 类转换为 numpy 吗array?

from dataclasses import dataclass
import numpy as np
@dataclass
class X:
    x: float = 0
    y: float = 0
x = X()
x_array = np.array(x) # would like to get an numpy array np.array([X.x,X.y])
Run Code Online (Sandbox Code Playgroud)

在最后一步中,我想获得一个数组np.array([X.x, X.y])。相反,我得到了array(X(x=0, y=0), dtype=object)。

我可以提供 的方法,dataclass以便根据需要进行转换(或重载 的现有方法之一dataclass)吗?

python numpy python-3.x python-dataclasses

3
推荐指数
1
解决办法
2323
查看次数