小编Bil*_*ong的帖子

Python/Pydantic - 使用带有 json 对象的列表

我有一个工作模型可以json使用pydantic. 模型数据集如下所示:

data = {'thing_number': 123, 
        'thing_description': 'duck',
        'thing_amount': 4.56}
Run Code Online (Sandbox Code Playgroud)

我想做的是将json文件列表作为数据集并能够验证它们。最终,该列表将转换为记录以pandas供进一步处理。我的目标是验证json看起来像这样的任意长的条目列表:

bigger_data = [{'thing_number': 123, 
                'thing_description': 'duck',
                'thing_amount': 4.56}, 
               {'thing_number': 456, 
                'thing_description': 'cow',
                'thing_amount': 7.89}]
Run Code Online (Sandbox Code Playgroud)

我现在的基本设置如下。请注意,添加class ItemList是尝试使任意长度起作用的一部分。

from typing import List
from pydantic import BaseModel
from pydantic.schema import schema
import json

class Item(BaseModel):
    thing_number: int
    thing_description: str
    thing_amount: float

class ItemList(BaseModel):
    each_item: List[Item]                                                                           
Run Code Online (Sandbox Code Playgroud)

然后,基本代码将生成我认为我在一个将接受Item对象的数组对象中寻找的内容。

item_schema = schema([ItemList])
print(json.dumps(item_schema, indent=2)) 

    {
      "definitions": {
        "Item": {
          "title": "Item", …
Run Code Online (Sandbox Code Playgroud)

python json pydantic

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

tcpdump:在复合过滤器中使用 AND 和 OR

我正在尝试向流添加过滤器tcpdump

我试图运行的表达式是:

tcpdump -i eth0 -U -w - host 192.168.2.29 and (port 22222 or port 22221 or port 80)
Run Code Online (Sandbox Code Playgroud)

这种特殊的格式会抛出:

bash: syntax error near unexpected token '('
Run Code Online (Sandbox Code Playgroud)

我预计这会基于THIS起作用。

以下工作不会引发错误:

a)  tcpdump -i eth0 -U -w - host 192.168.2.29
b)  tcpdump -i eth0 -U -w - port 22222
Run Code Online (Sandbox Code Playgroud)

我已经尝试了关联的每种排列都抛出相同的错误。

filter tcpdump

7
推荐指数
1
解决办法
7438
查看次数

Django 注释总和

我正在尝试对查询集中包含多行的列进行简单求和。我的直接问题是(a)如何设置get_queryset()以包含列的总和以及(b)如何访问模板中的该元素?继这个问题之后:

#models.py
class ItemPrice( models.Model ):
    price = models.DecimalField ( max_digits = 8, decimal_places=2 )
    ....
Run Code Online (Sandbox Code Playgroud)

提供了两个答案 - 一个使用.aggregate()我不相信会返回查询集的方法,并且.annotate()使用我相信将一个项目附加到查询集的方法。

因此,我预计以下内容会在此视图中的对象列表中添加另一个项目:

#views.py
def get_queryset(self):
    # generate table and filter down to a subquery.
    queryset = ItemPrice.objects.filter(<some_filter>)
    # sum the price for each row in the subquery.
    queryset = queryset.annotate(totals=Sum('price'))
    return queryset
Run Code Online (Sandbox Code Playgroud)

然后在模板中,我将能够像这样迭代对象列表:

#template.html
{% for item in object_list %}
    {{ item }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

期望其中一项(最后一项?)是price_sum并且余额可以作为price_sum.price

但是,当我将以下内容添加到模板中时,我得到每个订单项的价格 - 没有求和。 …

python django python-3.x

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

Django/Visual Studio教程 - 对象方法错误

我正在研究Django教程(这里).我在Mac上使用visual studio,VS在这段代码上一直显示错误:

latest_question_list = Question.objects.order_by('-pub_date')[:5]
Run Code Online (Sandbox Code Playgroud)

错误读取Class 'Question' has no 'objects' member.

这个例子构建了一个Questions Class实际上并没有直接拥有objects成员的例子,但代码运行正常,我认为Django中有一个内置成员objects.

因此,这让我相信visual studio调试器正在引发一个实际上并不存在的错误.

有没有办法来解决这个问题?

我查看preferences/settingextensions查看是否有一个插件或设置引用可以用于Django以清除Visual Studio中的错误 - 我没有看到任何内容.

django visual-studio python-3.x

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

Django queryset order_by绝对值

我有一个具有description属性和balance属性的查询集.目前,当我生成查询集时,它从最小到最大排序 - -

Model.objects.order_by('balance')

#output

Thing1          -120000
Thing2             -300
Thing3             7000
Thing4           100000
Run Code Online (Sandbox Code Playgroud)

我想订购的是降低绝对值,结果如下:

#Desired Output

Thing1          -120000
Thing4           100000
Thing3             7000
Thing2             -300
Run Code Online (Sandbox Code Playgroud)

我试过在里面传递各种方法,order_by()但我认为它需要是一个SQL类型的参数 - 我无法弄清楚.我发现这个使用了func expression注释时.我无法使用它order_by并且文档没有多大帮助.

有没有办法以这种方式订购查询集?

python django python-3.x

4
推荐指数
2
解决办法
914
查看次数

Pandas数学运算,以列值为条件

我需要进行一个以第二列中的值为条件的数学运算.这是设置.

给定一个简单的dataframe(df):

df = pd.DataFrame({
    'col1' : ['A', 'A', 'B', np.nan, 'D', 'C'],
    'col2' : [2, 1, 9, 8, 7, 4],
    'col3': [0, 1, 9, 4, 2, 3],
    })

In [11]: df
Out[11]: 
  col1  col2  col3
0    A     2     0
1    A     1     1
2    B     9     9
3  NaN     8     4
4    D     7     2
5    C     4     3
Run Code Online (Sandbox Code Playgroud)

我可以添加一个新的列(math)然后用基于10和的总和的数学表达式填充它col3.

df['math'] = 10 + df['col3']

In [14]: df
Out[14]: 
  col1  col2  col3  math …
Run Code Online (Sandbox Code Playgroud)

python pandas

4
推荐指数
2
解决办法
67
查看次数

熊猫将对象的空列添加到数据框

如何将空列添加到数据框?

这已经部分覆盖。

dtype of df["D"] = np.nan在接受的答案是dtype=numpy.float64

有没有办法在每个单元格中初始化一个空列表?

尝试过,df["D"] = [[]] * len(df)但是所有值都指向同一对象,将一个值设置为一个将全部设置。

df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df

   A  B
0  1  2
1  2  3
2  3  4


df["D"] = [[]] * len(df)
df
   A  B   D
0  1  2  []
1  2  3  []
2  3  4  []


df['D'][1].append(['a','b','c','d'])
df
   A  B               D
0  1  2  [[a, b, c, d]]
1  2  3  [[a, b, c, d]]
2  3  4 …
Run Code Online (Sandbox Code Playgroud)

object dataframe pandas

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

从“systemd”服务脚本中找不到 Python 模块

看了几十个以前的答案,我很惊讶我找不到任何东西......

我将pahomqtt 库用于一个非常简单的 python 程序来报告一些数据(在 Raspberry Pi 上运行)。我从 python 程序 (my_program.py) 中导入的是:

import paho.mqtt.client as mqtt
Run Code Online (Sandbox Code Playgroud)

如果我使用python my_program.py它从命令行运行程序,它运行时不会出错。但是,我试图将其设置为系统服务来管理其执行。我已经用类似的 python 程序完成了十几次,设置了各种 bash 脚本和服务文件。除了这个,他们都可以工作。我提到这一点是因为我认为它与 bash 或服务本身无关。为了完整起见,这里是设置。

从运行的 bash 脚本/systemd -

## Service (my_program.service):
ExecStart=/home/pi/my_program.sh

## and bash (my_program.sh)
python /home/pi/my/directory/my_program.py
Run Code Online (Sandbox Code Playgroud)

当我去启动服务时,我得到:

pi@ArmstrongSE:/etc/systemd/system $ sudo systemctl status my_program
* my_program.service
   Loaded: loaded (/etc/systemd/system/my_program.service; static; vendor preset: enabled)
   Active: failed (Result: exit-code) since Sat 2019-11-23 13:59:58 PST; 22s ago
  Process: 31100 ExecStart=/home/pi/my_program.sh (code=exited, status=1/FAILURE)
 Main PID: 31100 (code=exited, status=1/FAILURE)

Nov …
Run Code Online (Sandbox Code Playgroud)

python bash systemd

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

.aggregate()中使用的Django @property

我正在尝试从模型中汇总整数列表。整数派生的@property字段是装饰器字段。装饰器按预期工作,并且在内template.html(如果直接传递的话)显示没有问题。但是,如果尝试将@property字段.aggregate()传递给template引发错误的上下文,则该错误基本上会说出一个错误,Cannot resolve keyword 'sum_thing' into field.然后是一系列不包含任何装饰器字段的模型字段。

我的问题是-如何汇总(求和)模型的派生字段?

#models.py

class Foo(models.Model):
    a = 10      # a & b are both
    b = 5       # models.IntegerField() items

    @property
    def sum_thing(self):
        return self.a - self.b

#views.py

class Bar(generic.ListView):

    def get_context_data(self, **kwargs):

        qs = Foo.object.all()

        totals = {}

        totals['sumthing'] = qs.aggregate(total=Sum('sum_thing')

        context = {
            'totals': totals
        }

        return context
Run Code Online (Sandbox Code Playgroud)

**我已经大大简化了models.pyviews.py

python django django-views python-3.x

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