当前位置: 首页 > 知识库问答 >
问题:

python客户端的PubSub publish()函数中的动态属性数

归俊杰
2023-03-14

我试图使用Python publisher客户机将消息发布到Google云平台上的pub/sub服务。

我有一个有多张表的excel文件。每一页都有不同数量的列。对于每一个工作表,我需要将每一行作为单独的消息发布到云上的PubSub服务。

对于一个有4列的工作表,我参考文档中的示例代码使用了以下步骤:

  • Create an object called publisher from the google.cloud.pubsub_v1.PublisherClient() class
  • Use the publisher.publish() method for sending the data to my topic on the cloud
  • In the arguments for the publish() method, I have considered each column as an attribute in the message as shown in the following line of code (this line would be for publishing from one row):
    future = publisher.publish(topic_path, data, column1 = columnvalue1 , column2 = columnvalue2) 
    

    在我正在编写的程序中,我希望从用户指定的表中发布消息。由于不同的工作表具有不同的列数,我想知道是否有任何方法可以根据特定工作表中的列数动态更改publish()函数中的参数数?

    我尝试使用if-else语句使用强力方法。例如,有三张分别有2、3和4列的表;我将指定的工作表从Excel文件中读取到pandas Dataframe中。然后,我循环遍历每一行,并按以下方式发布内容:

    for i,row in df.iterrows():
        # <All other relevant code and operations>
     
        if (args.sheet == 'Sheet1'):
               future = publisher.publish(topic_path, data, column1 = columnvalue1 , column2 = columnvalue2)
        elif (args.sheet == 'Sheet2'):
               future = publisher.publish(topic_path, data, column1 = columnvalue1 , column2 = columnvalue2, column3 = columnvalue3) 
        elif (args.sheet == 'Sheet3'):
               future = publisher.publish(topic_path, data, column1 = columnvalue1 , column2 = columnvalue2, column3 = columnvalue3, column4 = columnvalue4) 
    
        # <rest of the code>
    

    这种方法有效;但是,随着工作表数量的增加,继续添加更多elif条件将成为一项乏味的任务。

    有没有更好的替代方案来解决这个问题?

共有1个答案

金子轩
2023-03-14

有两件事:

  1. 您需要知道哪个工作表需要哪些属性。您可以用您想要的格式定义它,YAML或JSON非常适合于此
{
 "sheet1": ["column1", "column2"],
 "sheet2": ["column1", "column2", "column3"],
 "sheet3": ["column1", "column2", "column3", "column4"],
}

def发布(self,topic,data,ordering_key=“”,retry=gapic_v1.method.default,**attrs):

和docstring

attrs(mapping[str,str]):作为元数据发送的属性字典。(这些字符串可能是文本字符串或字节字符串。)

因此,现在,根据工作表,您需要构建一个字典,并将其传递给publish方法

    dictionary={'column1':'columnvalue1','column2':'columnvalue2'}

    publisher.publish(topic_path, data,**dictionary)

 类似资料:
  • 10.2.1 动态参数客户端 需求: 编写两个节点,一个节点可以动态修改参数,另一个节点时时解析修改后的数据。 客户端实现流程: 新建并编辑 .cfg 文件; 编辑CMakeLists.txt; 编译。 1.新建功能包 新建功能包,添加依赖:roscpp rospy std_msgs dynamic_reconfigure。 2.添加.cfg文件 新建 cfg 文件夹,添加 xxx.cfg 文件(

  • 胡,伙计们, 我被这个问题困扰了很长时间,请帮助我!我有一台笔记本电脑上的服务器,它正在向另一台笔记本电脑上的客户端发送数据,这台笔记本电脑是同一局域网。我可以在服务器端和客户端的wireshark上看到udp数据包。。。但问题出在代码中,客户端只是停留在“printf”行(“打开数据报套接字…确定。\n”)为什么从服务器接收的buf不能打印?正如我所说,数据包在wireshark中是可见的,这让

  • 本文向大家介绍详解Python中的动态属性和特性,包括了详解Python中的动态属性和特性的使用技巧和注意事项,需要的朋友参考一下 导语:本文章记录了本人在学习Python基础之元编程篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 一、利用动态属性处理JSON数据源 属性:在Python中,数据的属性和处理数据的方法统称属性。 元编程:用元类进行编程,元类→类→对象,元

  • 问题内容: 我想动态地在按钮元素上包含/忽略Disabled属性。我已经看到了许多有关动态属性值的示例,但没有看到属性本身的示例。我有以下渲染功能: 由于有“ {”字符,这将引发分析错误。如何基于AppStore.cartIsEmpty()的(布尔值)结果包含/忽略禁用的属性? 问题答案: 添加可选属性(包括和其他可能要使用的其他属性)的最简洁方法是当前使用JSX传播属性: 通过使用传播属性,您可

  • 我设置不和谐欢迎机器人,在python上,这是错误: 文件“welcome bot.py”,第27行,在on_member_join Wait client中。send_message(member,newUserMessage)AttributeError:“Client”对象没有属性“send_message”

  • 问题内容: 谁能推荐适用于Python的Socket.IO客户端库?我环顾四周,但是我只能找到服务器实现或依赖于Twisted之类的框架。 我需要一个不依赖于其他框架的客户端库。 仅使用多种连接类型之一是不够的,因为python客户端将需要与多个socketio服务器一起工作,例如,其中许多都不支持websocket。 问题答案: Archie1986的回答很好,但是套接字更新(已更具体地讲,其协