小编bas*_*kum的帖子

Python:解析不完整的 XML 块

我从服务器接收 XML 块。这些块不是完整的段,但可能看起来像这样:

chunk1 = '<el a="1" b='
chunk2 = '"2"><sub c="'
chunk3 = '3">test</sub'
chunk4 = '></el><el d='
chunk5 = '"4" e="5"></'
chunk6 = 'el>'
Run Code Online (Sandbox Code Playgroud)

我如何解析这个流,以便每当一个“el”元素完成时调用一个函数?

到目前为止,我正在采用这种方法(使用 ElementTree):

import xml.etree.ElementTree as ET

text = ""

def handle_message(msg):
    text += msg
    try:
        root = ET.fromstring("<root>" + text + "</root>")
        for el in list(root):
            handle_element(el)
        text = ""
        return True
    except ET.ParseError:
        return False
Run Code Online (Sandbox Code Playgroud)

然而,这种方法实际上并不起作用,因为它仅handle_elementtext意外包含格式良好的 XML 文档时调用,但不能保证永远都是这种情况。

python xml xml-parsing

5
推荐指数
1
解决办法
1850
查看次数

python多处理/线程清理

我有一个python工具,基本上具有这种设置:

main process (P1) -> spawns a process (P2) that starts a tcp connection
                  -> spawns a thread (T1) that starts a loop to receive 
                     messages that are sent from P2 to P1 via a Queue (Q1)

server process (P2) -> spawns two threads (T2 and T3) that start loops to
                       receive messages that are sent from P1 to P2 via Queues (Q2 and Q3)
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我停止程序(使用Ctrl + C)时,它不会退出。服务器进程已结束,但主要进程仅挂在那里,我必须将其杀死。

线程循环函数看起来都一样:

def _loop(self):
    while self.running:
        res = self.Q1.get()
        if res is None: …
Run Code Online (Sandbox Code Playgroud)

python multithreading multiprocessing

5
推荐指数
1
解决办法
3844
查看次数

if(指针)条件内的递增指针

我正在阅读c ++代码,开发人员经常使用这种模式:

float *_array;

//...
while (expression) {

    if (_array) {
        // ...
        _array += 1;
    } else {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

外部while循环将独立于_array指向的位置终止.我的问题是if (_array)该条款中的条件和增量.

我首先想到它应该检查指针是否"耗尽"数组,但这似乎并非如此.我用这个简单的片段测试了它:

float *p = new float[5];
int i = 0;
for (i = 0; i < 10; i++) {
    if (p) {
        std::cout << "ok\n";
    } else {
        std::cout << "no\n";
    }
    p += 1;
}
Run Code Online (Sandbox Code Playgroud)

这将打印10次"ok".因此if (pointer),true即使指针超出定义的数组长度,也要进行求值.

if (pointer)在这种情况下还有什么其他目的呢?

c c++ arrays pointers

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

有没有办法检查相关对象是否已经被获取?

我希望能够使用select_related或检查是否已获取相关对象prefetch_related,以便可以相应地序列化数据。这是一个例子:

class Address(models.Model):
    street = models.CharField(max_length=100)
    zip = models.CharField(max_length=10)

class Person(models.Model):
    name = models.CharField(max_length=20)
    address = models.ForeignKey(Address)

def serialize_address(address):
    return {
        "id": address.id,
        "street": address.street,
        "zip": address.zip
    }

def serialize_person(person):
    result = {
        "id": person.id,
        "name": person.name
    }
    if is_fetched(person.address):
        result["address"] = serialize_address(person.address)
    else:
        result["address"] = None

######

person_a = Person.objects.select_related("address").get(id=1)
person_b = Person.objects.get(id=2)

serialize_person(person_a) #should be object with id, name and address
serialize_person(person_b) #should be object with only id and name
Run Code Online (Sandbox Code Playgroud)

在此示例中,该功能is_fetched正是我要寻找的。我想确定person对象是否已经具有解析地址,并且只有在具有解析地址的情况下,也应该对其进行序列化。但是,如果没有,则不应再执行任何数据库查询。

那么有没有办法在Django中实现呢?

python django django-queryset django-select-related

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

防止 VS Code 在 Enter 时更改缩进

假设我有一个包含以下内容的 JavaScript 文件,并且光标位于管道符号 ( |) 处:

class ItemCtrl {
    getPropertiesByItemId(id) {
        return this.fetchItem(id)
            .then(item => {
                return this.getPropertiesOfItem(item);
            });
    }|
}
Run Code Online (Sandbox Code Playgroud)

如果我现在按 Enter,代码会按以下方式更改:

class ItemCtrl {
    getPropertiesByItemId(id) {
        return this.fetchItem(id)
            .then(item => {
                return this.getPropertiesOfItem(item);
            });
        }
        |
}
Run Code Online (Sandbox Code Playgroud)

当它应该与方法定义对齐时,它错误地将右花括号与 return 语句对齐。我知道函数内部的格式不是最好的,但我仍然宁愿禁用该功能以防止发生类似的奇怪事情。

我已经设置了editor.autoIndentfalse但它仍然会发生。有没有其他方法,我如何完全关闭此功能?(或使其以更智能的方式工作)

visual-studio-code

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