将列表的区块写入文件,在区块末尾添加换行符

2024-09-29 22:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

对此有问题。我发现了大量关于如何将列表写入文件的示例,以及如何使用列表理解、numpy(这里似乎不适用)和其他方法将列表拆分,但这并不是我要具体做的

我的职责之一是:

 def createdevstring():
        tree = ET.parse('regcheckdevicelist.xml')
        text = [child.text for child in tree.iter() if not child.text.strip() == '']
        devicename = ",".join(text)
        return devicename

它所做的是解析xml文档并剥离xml。列表text最终看起来是这样的,尽管该列表可以有3个条目到10000+

例如: ['devicename1','devicename2','devicename3']

My函数当前获取这些列表项并将它们连接到,并存储在stringvardevicename

结果:

devicename1,devicename2,devicename3,

这可以很好地工作,但是,我正在尝试使用一个最大设备查询计数为200个设备名称的API。如果我质疑>;200个设备,我在xml响应中只得到200个

我一直在尝试编写代码,但无法实现的是:

选项1)将列表拆分为子数组,其中包含来自tree数组的200个条目,最后一个数组是任意数<=200不需要大小相等的阵列,只需要它们的最大大小为200。然后,我需要一种方法将每个子数组绘制成一个stringvar,其中格式与当前相同,是一个逗号分隔的值字符串,然后为每个构造的cdv stringvar运行requests.request ["POST"....]

选项2)将列表成员写入每个成员之间有','的文件,在写入200之后添加一个换行符'\n'。然后,对文件中的每一行执行requests.request["POST"....]

任何关于这方面的指导都是非常棒的


Tags: 文件方法textchildtree列表选项条目
1条回答
网友
1楼 · 发布于 2024-09-29 22:31:08

这里有一个建议

首先,这里是一个迭代器函数,用于将iterable拆分为块

def chunker(sequence, chunk_size):
    it = iter(sequence)
    while True:
        chunk = []
        try:
            for i in range(chunk_size):
                chunk.append(next(it))
            yield chunk
        except StopIteration:
            if chunk:
                yield chunk
            return

一旦有了它,我建议您使用一个函数来代替createdevstring函数,该函数只返回所有元素的文本,剩下的工作留给调用者

def get_text_of_elements():
    tree = ET.parse('regcheckdevicelist.xml')
    return (child.text for child in tree.iter() if not child.text.strip() == '')

以下是调用方可以对其执行的操作:

for text in chunker(get_text_of_elements(), 200):
    devicename = ",".join(text)
    # do whatever you want with it inside this loop

实际上这里get_text_of_elements是以生成器的形式返回结果,而不是一次创建整个列表,尽管如果您愿意,您可以通过将列表从我的圆括号更改回您最初使用的方括号来返回列表,它仍然可以工作

一个轻微的变化是将对设备名称的转换也放在函数中,但也将其作为迭代器,而不是返回值,这样在调用程序中就有了一个很好的简单循环:

def get_devicenames(chunk_size=200):
    ET.parse('regcheckdevicelist.xml')
    for text in chunker(
            (child.text for child in tree.iter() if not child.text.strip() == ''),
            chunk_size):
        yield ",".join(text)


for devicename in get_devicenames():
    # ... do something ...

相关问题 更多 >

    热门问题