首页 > 编程问答 >Databricks Pyspark 解析连接字符串

Databricks Pyspark 解析连接字符串

时间:2024-07-21 07:57:21浏览次数:9  
标签:python parsing pyspark databricks

有没有一种简单的方法来解析这种格式的连接字符串?

HOST=HostName;Port=1234;ServiceName=Database;USer ID=User1;Password=Password123;

我需要解析主机和端口、数据库、用户和密码,并将它们分配给单独的变量。


import re

def 解析连接字符串(conn_str):
    """解析连接字符串并返回一个包含主机、端口、数据库、用户和密码的字典。

    Args:
        conn_str: 连接字符串。

    Returns:
        一个包含主机、端口、数据库、用户和密码的字典,如果无法解析连接字符串,则返回 None。
    """
    match = re.match(r"HOST=(.*?);Port=(.*?);ServiceName=(.*?);USer ID=(.*?);Password=(.*?);", conn_str)
    if match:
        return {
            "host": match.group(1),
            "port": match.group(2),
            "database": match.group(3),
            "user": match.group(4),
            "password": match.group(5)
        }
    else:
        return None


conn_str = "HOST=HostName;Port=1234;ServiceName=Database;USer ID=User1;Password=Password123;"
conn_dict = 解析连接字符串(conn_str)

if conn_dict:
    host = conn_dict["host"]
    port = conn_dict["port"]
    database = conn_dict["database"]
    user = conn_dict["user"]
    password = conn_dict["password"]

    print(f"主机:{host}")
    print(f"端口:{port}")
    print(f"数据库:{database}")
    print(f"用户:{user}")
    print(f"密码:{password}")
else:
    print("无法解析连接字符串。")

这段代码首先使用 re.match 函数匹配连接字符串中的各个部分。如果匹配成功,则将提取到的值存储在一个字典中,并将其返回。否则,返回 None

代码解释:

  1. re.match(r"HOST=(.*?);Port=(.*?);ServiceName=(.*?);USer ID=(.*?);Password=(.*?);", conn_str) :
  2. 此代码使用正则表达式匹配连接字符串。
  3. (.*?) 是一个非贪婪匹配组,用于捕获每个键值对的值。
  4. HOST= , Port= , ServiceName= , USer ID= , 和 Password= 用于匹配各个键。

  5. if match: : 如果正则表达式匹配成功,则执行以下代码块。

  6. return { "host": match.group(1), ... } :

  7. 创建一个字典,将提取的值存储在相应的键下。
  8. match.group(1) match.group(2) 等用于访问捕获组的值。

  9. else: return None : 如果正则表达式匹配失败,则返回 None

  10. 代码的其余部分 :

  11. 检查 conn_dict 是否为 None
  12. 如果不为 None ,则从字典中提取各个值并打印出来。
  13. 否则,打印错误消息。

这段代码提供了一种解析特定格式连接字符串的简单方法。可以根据需要修改正则表达式和代码,以处理不同的连接字符串格式。

标签:python,parsing,pyspark,databricks
From: 78765302

相关文章

  • 如何在Python中给jupyter单元标准输入?
    我正在尝试在接受用户输入的jupyter笔记本上运行一个程序,但我不知道如何让它读取标准输入。例如,如果我使用shift-enter:a=input()print(a)运行代码,则单元格指示它正在运行,但不接受我的输入。我如何让它接受输入?你遇到的问题是Jupyternotebook中的代码单元默认......
  • Python:如何从 csvreader 列表中删除括号和单引号?
    Pythonn00b在这里。尝试使用csvreader从文件导入数组并打印一个值,但它添加了括号和单引号。这是我的代码:importrandomimportcsvwithopen('crimes.csv','r')ascsvfile:crimes=list(csv.reader(csvfile))hello=["Hello","Greetings","Hi&q......
  • Python 中的多行输入,支持空行并在控制台中检查“\n”
    您好,亲爱的社区,在解决某个竞赛任务时出现了问题。我解决了它,但由于输入棘手而无法交付。我在谷歌上搜索并尝试了几种找到的方法,但如果应用于此任务,它们中的每一种都有一些弱点。而且我无法完全重现所应用的输入,因为它嵌入在竞赛界面中;我可能只依赖描述。这就是为什么我......
  • Python Pandas - 读取 CSV 或 Excel
    我允许用户上传CSV或Excel文件。我正在使用pandas读取文件并创建数据框。由于我无法预测用户将上传哪种文件类型,因此我将pd.read_csv()和pd.read_excel()包装在try/except块中。ifform.validate_on_submit():input_filename=secure_filename(form.file.da......
  • 如何在 python 脚本中调用 robocopy 来批量复制多个文件夹?
    我正在尝试在网络驱动器之间移动多个大文件夹(>10Gb、>100个子文件夹、>2000个文件)。我尝试过在python中使用Shutil.copytree命令,它工作得很好,只是由于不同的原因它无法复制一小部分(<1%的文件)。我相信robocopy对我来说是最好的选择,因为我可以创建一个记录传输过......
  • 如何在Python中使用装饰器动态创建类方法?
    我正在开发一个Python项目,我需要在运行时动态地为类创建方法。我想使用装饰器根据一些外部配置将这些方法添加到类中。要求是:装饰器应该从外部配置(例如字典)读取方法定义。装饰器应该动态地将这些方法添加到类中。每个生成的方法都应具有配置中指定的自己唯一的实现。以......
  • python 中的可扩展视频文件完整性验证
    我的目录包含约100万个视频文件,嵌套在100个子目录下。我想编写一个python脚本来验证这些文件没有损坏,然后删除损坏的文件。做到这一点最有效的方法是什么?它运行的机器有64个cpu核心。当然,以下是如何在Python中构建可扩展视频文件完整性验证器的步骤,该验证器可以......
  • Python:对很高维的矩阵进行对角化?
    目前我正在研究一个涉及对角化矩阵以获得特征值和特征向量的问题。但现在我想将问题扩展到200,000x200,000的尺寸。我查找了如何将矩阵存储在numpy中,有人建议使用PyTables。看起来很有希望。但我想知道哪里有工具可以帮助对PyTables中的矩阵存储进行对角化。......
  • 除了curses之外,是否有一个python包可以轻松控制终端的输出?
    我现在正在处理一些小项目,我对GUI的偏好是终端中漂亮的文本界面。我宁愿不强迫用户处理Windowscurses二进制文件,所以我正在寻找不同的选项。我已经发现了asciimatics,但我想考虑所有可能的选择。如果有人有任何经验或知道解决此用例的包,我将不胜感激。谢谢你说的没错......
  • 当值来自函数 python unittest 时,如何模拟全局变量
    我必须在python中模拟全局变量,但变量值来自另一个函数。当我导入文件时,这个函数正在运行,但我想要那里的模拟值。secrets.pyimporttracebackimportloggingimportboto3importosimportjsonlogger=logging.getLogger()logger.setLevel(logging.INFO)secret_......