• [技术干货] Python中的global关键字
    在Python中,global关键字用于在函数内部声明一个变量是全局的,即该变量在函数外部定义,而不是在函数内部定义的局部变量。当你在函数内部想要修改一个全局变量的值时,你需要使用global关键字来声明这个变量,否则Python会假设你正在尝试创建一个新的局部变量。下面是一个简单的例子来说明global的用法:# 定义一个全局变量 count = 0 def increment(): # 使用global关键字声明count是全局变量 global count # 修改全局变量的值 count += 1 print(f"Count inside function: {count}") # 调用函数 increment() print(f"Count outside function: {count}")在这个例子中,count是一个在函数外部定义的全局变量。在increment函数中,我们使用global关键字来声明我们要修改的是这个全局变量,而不是创建一个新的局部变量。当我们调用increment函数时,全局变量count的值会增加,并且在函数内部和外部都可以看到这个变化。如果没有使用global关键字,那么count += 1这行代码会在函数内部创建一个新的局部变量count,并且这个局部变量会在函数结束时被销毁,而不会影响到全局变量count。需要注意的是,过度使用全局变量可能会导致代码难以理解和维护,因为它打破了函数的封装性,使得函数的行为依赖于其外部环境的状态。因此,在编写函数时,应该尽量避免使用全局变量,而是通过参数传递和返回值来在函数之间传递数据。
  • [技术干货] langchain的基本功能
    什么是langchianLangChain 是一个用于开发由语言模型驱动的应用程序的框架。他主要拥有 2 个能力:可以将 LLM 模型与外部数据源进行连接允许与 LLM 模型进行交互什么是LLMLLM 模型:Large Language Model,大型语言模型Langchain的基本功能L## LM 调用支持多种模型接口,比如 OpenAI、HuggingFace、AzureOpenAI …Fake LLM,用于测试缓存的支持,比如 in-mem(内存)、SQLite、Redis、SQL用量记录支持流模式(就是一个字一个字的返回,类似打字效果)Prompt 管理支持各种自定义模板langchain hub提供了丰富的预置模板拥有大量的文档加载器,比如 Email、Markdown、PDF、Youtube …对索引的支持文档分割器向量化对接向量存储与搜索,比如 Chroma、Pinecone、QdrandChainsLLMChain各种工具 ChainLangChainHub名词介绍Chain链我们可以把 Chain 理解为任务。一个 Chain 就是一个任务,当然也可以像链条一样,一个一个的执行多个链。Agent代理我们可以简单的理解为他可以动态的帮我们选择和调用chain或者已有的工具。Loader加载器从指定源读取并加载数据,例如文件夹:DirectoryLoaderAzure 存储:AzureBlobStorageContainerLoaderCSV文件:CSVLoader印象笔记:EverNoteLoaderGoogle网盘:GoogleDriverLoader任意网页:UnstructuredHTMLLoaderPDF:PyPDFLoader亚马逊S3:S3DirectoryLoader / S3FileLoaderYoutube:YoutubeLoaderDocument文档当使用loader加载器读取到数据后,需要转成document才能继续使用。 Document 类型主要包含两个属性:page_content 包含该文档的内容。meta_data 为文档相关的描述性数据,类似文档所在的路径等。Text Spltters 文本分割我们每次把文本当作 prompt 发给 openai api,还是还是使用 openai api embedding 功能都是有字符限制的。 比如我们将一份300页的 pdf 发给 openai api,让他进行总结,它肯定会报超过最大 Token 错。所以这里就需要使用文本分割器去分割我们 loader 进来的 Document。Embedding用于衡量文本的相关性。这个也是 OpenAI API 能实现构建自己知识库的关键所在。 它相比 fine-tuning 最大的优势就是,不用进行训练,并且可以实时添加新的内容,而不用加一次新的内容就训练一次,并且各方面成本要比 fine-tuning 低很多。Vectorstores 向量数据库因为数据相关性搜索其实是向量运算。所以,不管我们是使用 openai api embedding 功能还是直接通过向量数据库直接查询,都需要将我们的加载进来的数据 Document 进行向量化,才能进行向量运算搜索。转换成向量也很简单,只需要我们把数据存储到对应的向量数据库中即可完成向量的转换总结借助LangChain,与大语言模型的交互变得更加便捷。LangChain 提供的接口和功能有助于将 LLM 的强大能力轻松集成到你的工作应用程序中。因此,现在所有用到大模型的代码,基本上都是使用langchain进行开发更多内容,可以查看langchain官方文档:cid:link_0
  • [技术干货] Vanna 利用自然语言生成SQL 和 数据分析报表
    产品介绍Vanna是一个为用户提供更便捷地与SQL数据库交互的工具。它通过允许用户使用自然语言来查询数据库,然后将这些语言转换成SQL语句,从而实现数据库信息的查询和获取。官网地址:cid:link_0项目地址:cid:link_1在线体验注册KEY在官网主页,点击“Get Started for Free”,按照提示输入邮箱地址然后到你的邮箱,贴入6位验证码验证成功后,你就可以免费体验 Vanna 了复制这段代码,贴到notebook即可直接运行!pip install vanna from vanna.remote import VannaDefault vn = VannaDefault(model='chinook', api_key='略') vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite') vn.ask('What are the top 10 artists by sales?') from vanna.flask import VannaFlaskApp VannaFlaskApp(vn).run()点击 next 后,会让你创建一个独一无二的模型名创建成功后就跳到付费页面了。Vanna默认使用的是GPT-3.5-Turbo(Vanna是免费使用的,但GPT3.5需要付费才能使用)下载并运行vanna在github中搜索vanna下载这两个项目vanna-ai/vanna:这个是核心应用程序vanna-ai/vanna-streamlit:这个是用来做界面交互的requirements.txt 的内容如下,我们需要先安装这里面的依赖pip install -r requirements.txt依赖安装好后,如果你有 VANNA_API_KEY 和 GCP_PROJECT_ID,可以在该目录下新建一个 test.envVANNA_API_KEY= ... GCP_PROJECT_ID= ....在 app.py 的首行添加如下设置,加载环境变量from dotenv import load_dotenv load_dotenv(dotenv_path="test.env")使用streamlit命令,执行app.py程序streamlit run .\app.py私有化部署如果你想免费运行,那么就需要私有化部署大模型了部署LLMs(例如:chatglm3)首先,下载chatglm3和模型到本地,这部就不赘述了chatglm3代码的下载地址如下:cid:link_2模型可以去huggingface下载,或者魔塔社区。其中ChatGLM3-6B:这个是对话模型(实验中,建议下载这个)ChatGLM3-6B-Base:这个是模型的基座,用与微调/全量调试ChatGLM3-6B-32K:用于长上下文场景在chatglm3目录中,找到openai_api_demo文件夹,后台执行api_server.py,启动服务然后执行启动命令python3 api_server.py > output.log 2>&1 &这个命令是在Unix-like操作系统中使用的,用于启动一个Python脚本api_server.py,并将该脚本的输出重定向到文件output.log中。同时,如果有错误发生,错误信息也会被重定向到output.log中。最后,使用&符号将这个进程放到后台运行。拆分开来解释:python3 api_server.py: 这部分是调用Python解释器执行脚本api_server.py。python3是Python 3的解释器命令,而api_server.py是你要运行的Python脚本。output.log: 这是一种重定向操作,它将标准输出(通常是终端或控制台)的内容重定向到文件output.log中。这意味着脚本执行的输出信息,如日志消息和打印输出,将不会在屏幕上显示,而是被写入到output.log文件中。2>&1: 这是一种特殊的重定向操作,它将标准错误(通常也显示在控制台上,与标准输出相同)重定向到标准输出。在这个上下文中,标准输出已经被重定向到了output.log,因此这个命令实际上是将标准错误也重定向到output.log中,这样所有的输出和错误信息都会被收集在同一个文件里。&: 这个符号将命令放入后台执行。这意味着在执行这个命令的终端窗口中,Python脚本将在后台运行,允许用户继续使用终端进行其他操作。作用就是启动一个Python脚本,并将它的输出和错误信息都记录到一个文件中,同时让这个脚本在后台运行。这样做的好处是可以在不影响用户操作的情况下运行长时间运行的脚本,同时方便地收集脚本执行的日志信息。启动后执行下面命令,查看日志的持续输出tail -f output.log自定义Vanna代码新建一个MyVanna.py文件,贴入以下内容#使用OpenAI API接口或者 OpenAI兼容本地大模型 from vanna.openai.openai_chat import OpenAI_Chat from openai import OpenAI from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore import dynamic # 接入OpenAI兼容本地大模型 class MyVanna(ChromaDB_VectorStore, OpenAI_Chat): def __init__(self, config=None): ChromaDB_VectorStore.__init__(self, config={"path":"Chroma_123"}) #OneAPI包装本地LLM后外露的OpenAI兼容接口 client = OpenAI( api_key="sk-*********", base_url="https://192.168.0.22/v1", ) OpenAI_Chat.__init__(self, client=client, config={"model": "chatglm3-6b"}) def set_model(self, model:str): pass def set_api_key(self, value: str): pass def connect_to_bigquery(self, project_id: str): pass vn = MyVanna() vn.connect_to_sqlite('D://Downloads/Chinook.sqlite') vn.train(ddl=""" -- sqlite Employee definition CREATE TABLE Employee ( EmployeeId INTEGER NOT NULL, LastName NVARCHAR(20) NOT NULL, FirstName NVARCHAR(20) NOT NULL, Title NVARCHAR(30), ReportsTo INTEGER, BirthDate DATETIME, HireDate DATETIME, Address NVARCHAR(70), City NVARCHAR(40), State NVARCHAR(40), Country NVARCHAR(40), PostalCode NVARCHAR(10), Phone NVARCHAR(24), Fax NVARCHAR(24), Email NVARCHAR(60), CONSTRAINT PK_Employee PRIMARY KEY (EmployeeId), FOREIGN KEY (ReportsTo) REFERENCES Employee (EmployeeId) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE INDEX IFK_EmployeeReportsTo ON Employee (ReportsTo); """) vn.train(ddl=""" -- sqlite Customer definition CREATE TABLE Customer ( CustomerId INTEGER NOT NULL, FirstName NVARCHAR(40) NOT NULL, LastName NVARCHAR(20) NOT NULL, Company NVARCHAR(80), Address NVARCHAR(70), City NVARCHAR(40), State NVARCHAR(40), Country NVARCHAR(40), PostalCode NVARCHAR(10), Phone NVARCHAR(24), Fax NVARCHAR(24), Email NVARCHAR(60) NOT NULL, SupportRepId INTEGER, CONSTRAINT PK_Customer PRIMARY KEY (CustomerId), FOREIGN KEY (SupportRepId) REFERENCES Employee (EmployeeId) ON DELETE NO ACTION ON UPDATE NO ACTION ); CREATE INDEX IFK_CustomerSupportRepId ON Customer (SupportRepId); """) vn.train(ddl=""" CREATE TABLE IF NOT EXISTS users ( id INT PRIMARY KEY COMMENT '用户ID', username VARCHAR(50) COMMENT '用户名', email VARCHAR(100) COMMENT '电子邮件', age INT COMMENT '年龄', gender VARCHAR(10) COMMENT '性别(男/女)', city VARCHAR(50) COMMENT '城市' ) COMMENT='用户信息表' CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci; """)向量数据库使用默认的:Chromadb(这个是Vanna官方支持的向量库,很多代码都已经预置了。如果你需要换成其他库,那么就需要重写代码了)LLMs使用chatglm3模拟出的openai接口(由于是私有化部署的,不校验sk-key,因此可以随便写)运行后的界面如下下面输入自然语言,就会生成sql了
  • [技术干货] 没有LLMs,让 LangChain 跑起来的 3 个方法
    背景说明Langchain 官方文档地址: cid:link_0使用 LangChain 开发 LLM 应用时,需要机器进行 LLMs 的私有化部署,或者购买相应的服务,好多同学第一步就被劝退了。 那么如何绕过这个步骤先学习 LLM 模型的应用,对 Langchain 进行快速上手?本文将告诉你 3 个方法,把 LangChain 跑起来1. 使用 Langchian 提供的 FakeListLLM首先引入依赖包from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.agents import load_tools from langchain.llms.fake import FakeListLLM然后创建一个假的LLMsresponses=[ "Action: requests_get\nAction Input: chatGpt原理 N", "Final Answer: mock答案" ] llm = FakeListLLM(responses=responses)然后加载工具,并初始化Agentquestion = 'langchain基本原理' responses=[ f'Action: 固定的假设操作\nAction Input: {question}', 'Final Answer: mock答案' ] llm = FakeListLLM(responses=responses)agent.run 表示开始回答问题tools = load_tools(['llm-math'], llm=llm, allow_dangerous_tools=True) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)完整代码如下from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.agents import load_tools from langchain.llms.fake import FakeListLLM question = 'langchain基本原理' responses=[ f'Action: 固定的假设操作\nAction Input: {question}', 'Final Answer: mock答案' ] llm = FakeListLLM(responses=responses) tools = load_tools(['llm-math'], llm=llm, allow_dangerous_tools=True) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) agent.run('{question}_1') agent.run('{question}_2') agent.run('{question}_3')2. 使用 Langchian 提供的 HumanInputLLM,访问维基百科查询首先,需要使用 pip install wikipedia 命令安装依赖使用维基百科工具tools = load_tools(['wikipedia'])这里必须要设置为中文url前缀,不然访问不了set_lang('zh')初始化LLMllm = HumanInputLLM(prompt_func = lambda prompt: print(f'\n___提示词开始____\n{prompt}\n_____提示词结束______'))初始化agentagent = initialize_agent(tools, llm, agent = AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) question = '小猪佩奇是谁' agent.run(question)完整代码如下from langchain.llms.human import HumanInputLLM from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.agents import AgentType from wikipedia import set_lang set_lang('zh') tools = load_tools(['wikipedia']) llm = HumanInputLLM(prompt_func = lambda prompt: print(f'\n___提示词开始____\n{prompt}\n_____提示词结束______')) agent = initialize_agent(tools, llm, agent = AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) question = '小猪佩奇是谁' agent.run(question)3 使用 huggingface网址:cid:link_1首先,注册账号然后,创建 Access TokensDemo: 使用模型对文档进行摘要from langchain.document_loaders import UnstructuredFileLoader from langchain.chains.summarize import load_summarize_chain from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain import HuggingFaceHub import os from decouple import config from langchain.agents import load_tools这里 mock 下 ChatGPT, 使用 HUGGINGFACEHUBos.environ["HUGGINGFACEHUB_API_TOKEN"] = config('HUGGINGFACEHUB_API_TOKEN')导入文本loader = UnstructuredFileLoader("docment_store\helloLangChain.txt")将文本转成 Document 对象document = loader.load() print(f'documents:{len(document)}')初始化文本分割器text_splitter = RecursiveCharacterTextSplitter( chunk_size = 500, chunk_overlap = 0 )切分文本split_documents = text_splitter.split_documents(document) print(f'documents:{len(split_documents)}')加载 LLM 模型overal_temperature = 0.1 flan_t5xxl = HuggingFaceHub(repo_id="google/flan-t5-xxl", model_kwargs={"temperature":overal_temperature, "max_new_tokens":200} ) llm = flan_t5xxl tools = load_tools(["llm-math"], llm=llm)创建总结链chain = load_summarize_chain(llm, chain_type="refine", verbose=True)执行总结链chain.run(split_documents)总结尝试了3种方案后,我发现第一种方案是最适合国内网友的。第二种和第三种方法均需要翻墙,且执行速度较慢,国内就不推荐了即使用 FakeLLMs 预置结果,进行输出
  • [技术干货] Python的Wikipedia模块使用指南
    前言Python的Wikipedia模块是一个非常好用的工具,它可以帮助我们快速地获取Wikipedia上的信息。在这篇博客中,我将通过一个简单的例子,向大家介绍这个模块的使用方法。安装依赖首先,我们需要安装这个模块。在命令行中输入如下命令安装 wikipedia 依赖pip install wikipedia由于默认日志容易混在一起,为了更好区分,我们还要使用 loguru 来进行日志输出和上色pip install loguru代码实战接下来,让我们看看这个例子(注意:以下代码需要使用科学上网方可访问)from loguru import logger import wikipedia from wikipedia import set_lang set_lang('zh')这里,我们首先导入了logger模块,用于输出信息。然后,我们导入了wikipedia模块,并设置了语言为中文。result = wikipedia.summary("Wikipedia") logger.debug(result)这行代码的作用是获取Wikipedia页面的摘要。我们可以看到,输出的摘要信息是中文的,这是因为我们之前设置了语言为中文。result = wikipedia.search("小猪佩奇") logger.debug(result)这行代码的作用是在Wikipedia上搜索“小猪佩奇”。我们可以看到,输出的搜索结果也是中文的。result = wikipedia.page("小米su7") logger.debug(result) logger.info(result.title) logger.info(result.categories)这行代码的作用是获取“小米su7”的Wikipedia页面。我们可以看到,输出的页面信息、标题和分类都是中文的。result = wikipedia.summary("Facebook", sentences=1) logger.debug(result)这行代码的作用是获取Facebook页面的摘要,但是只获取一句话。我们可以看到,输出的摘要信息只有一句话。执行结果如下总结通过这个例子,我们可以看到,Python的Wikipedia模块是一个非常方便的工具,它可以帮助我们快速地获取Wikipedia上的信息。而且,它的使用方法也非常简单。希望大家可以通过这篇博客,了解到这个模块的用法,并在实际的工作和学习中,使用它来提高效率。
  • CodeArts IDE For Python 快速使用
    CodeArts IDE 带有 Python 扩展,为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性,与多种 Python 解释器协同工作,轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述了 CodeArts IDE 中为 Python 提供的特性。在 CodeArts IDE 上开始使用 Python 前,请确保您在计算机上已安装了 Python。一、新建Python项目CodeArts IDE 提供了一个 Python 项目向导,帮助您更轻松地创建新项目并配置环境。步骤1 在主菜单中,选择文件 > 新建 > 工程 。步骤2 在打开的“新建工程”对话框中,从左侧列表选择“Python“,填入项目参数。设置项目名称和路径。在“新环境使用“的下拉框中选择使用“Virtualenv“选项,让CodeArts IDE 为您创建一个隔离的、特定于项目的 Virtualenv Python环境。这样就可以使您在项目级别安装包,不会污染全局Python。保留创建环境的默认位置。确保在基础解释器列表中已选择一个解释器。通常CodeArts IDE会自动从标准安装位置检测解释器位置并展示在此处。步骤3 勾选“创建main.py示例脚本“复选框,以便CodeArts IDE使用示例内容填充项目,让您快速试用IDE的主要功能。步骤4 单击“创建“。CodeArts IDE将创建并打开项目,在项目根目录下的 “venv” 文件夹中创建一个新环境,并将其设置为项目解释器。二、使用代码提示在编写代码时,CodeArts IDE会为您的项目文件、内置模块和第三方模块提供代码补全建议。代码补全功能会在您键入时自动显示符号和文档,您也可以通过手动按下 “Ctrl+I” / “Ctrl+Space” / “Ctrl+Shift+空格键” 来随时触发它。此外,您还可以将鼠标悬停在标识符上以获取更多相关信息。 三、浏览代码CodeArts提供了丰富的代码导航功能。例如,您可以在代码编辑器中将鼠标悬停在符号上,以查看其快速信息。通过 “Ctrl+单击” 符号,或按下 “F3” / “Alt+F11”(IDEA快捷键) / “F4”(IDEA快捷键) / “Ctrl+Enter”(IDEA快捷键) / “Ctrl+B”(IDEA快捷键),快速导航到符号的声明位置。您也可以借助CodeArts IDE SmartSearch功能,立即搜索并导航到任何项目位置,查找和执行任何CodeArts IDE命令。 四、运行代码您可以通过以下的任意方式来使用当前选定的解释器运行代码:单击CodeArts IDE主工具栏上的“开始执行(不调试)”按钮 (),以启动内置的“当前文件”启动配置。在代码编辑器的任意位置右键单击,并选择“运行 Python 文件”。如果您在选定的代码块上调用此命令,则可以仅运行该部分代码。 在资源管理器中右键单击 Python 文件,并从上下文菜单中选择“运行 Python 文件”。 五、调试代码CodeArts 的 Python 扩展提供了调试支持,让您能够设置断点、检查数据,在逐步执行程序时使用调试控制台。对于快速开始项目,您可以在 "main.py" 文件的第 14 行设置一个断点。将光标悬置在 “print_hi” 调用上,然后按下 “F9” / “Ctrl+Shift+B” / “Ctrl+F8”(IDEA快捷键)。您也可以通过单击编辑器左侧的行号旁的空白区域来设置断点。 接下来需要初始化调试器,您可以按下 “F5” / “F11” / “Shift+F9”(IDEA快捷键),或者单击CodeArts IDE主工具栏上的“开始调试”按钮 ()。CodeArts IDE将启动内置的“当前文件”启动配置,调试器将在包含断点的那一行暂停运行。此时您可以使用调试工具栏上的命令来控制程序执行,并查看“运行和调试”视图中的“变量”来检查变量。六、测试代码Python扩展支持使用 unittest 和 pytest 框架进行测试。CodeArts 可以帮助您配置框架集成,并提供专用的“测试”视图,让您能够方便地识别和运行测试。 以下是一个如何创建和运行一个 unittest 测试的示例。步骤1 创建一个测试对象,也就是新建一个名为 “inc_dec.py” 的文件,它包含以下内容:def increment(x): return x + 1 def decrement(x): return x - 1步骤2 创建一个 “unittest” 测试来覆盖这个测试对象,即创建一个名为 “inc_decunittest.py” 的文件,包含以下内容::import inc_dec # The code to test import unittest # The test framework class Test_TestIncrementDecrement(unittest.TestCase): def test_increment(self): self.assertEqual(inc_dec.increment(3), 4) def test_decrement(self): self.assertEqual(inc_dec.decrement(3), 4) if __name__ == '__main__': unittest.main()步骤3 在 CodeArts IDE 中配置 unittest 框架集成。单击 CodeArts IDE 底部面板中的 “测试” 按钮()打开“测试”视图,单击 “Configure Python Tests” 按钮。 在弹出的对话框中,选择您想要启用集成的测试框架,在本例中是 “unittest”。 在接下来的对话框中,选择包含测试源文件的项目文件夹。在我们的例子中,是项目根文件夹(“.”)。 下一个对话框中,选择用于标识测试文件的文件通配符模式,本例中为 \“*test.p\”。 步骤4 在配置完框架集成后,CodeArts IDE会自动检测测试并在“测试”视图中显示它们。 现在,您可以使用各种命令(在命令面板(“Ctrl Ctrl” / “Ctrl+Shift+P”)中,在编辑器行号区,或在“测试”视图中)来运行和调试测试,包括运行单个测试文件和单个方法。
  • [技术干货] Python中数据解压缩的技巧分享【转】
    在日常的数据处理和分析中,经常会遇到需要对压缩数据进行解压缩的情况。Python提供了丰富的库和模块来处理各种类型的压缩文件,如zip、gzip、tar、bz2等,使得数据解压缩变得简单而高效。本文将深入探讨Python中数据解压缩的各种方法和技巧,包括使用标准库和第三方库来解压各种类型的压缩文件,以及如何处理压缩文件中的数据。同时,提供大量的示例代码来帮助大家更好地理解和应用这些方法。使用 zipfile 模块解压 Zip 文件Zip 文件是一种常见的压缩文件格式,Python的标准库中提供了 zipfile 模块来处理Zip文件。可以使用该模块来解压缩Zip文件,并访问其中的文件内容。12345678910111213import zipfileimport os# 定义Zip文件路径和解压目录zip_file = 'data.zip'extract_dir = 'extracted_data'# 解压Zip文件with zipfile.ZipFile(zip_file, 'r') as zip_ref:    zip_ref.extractall(extract_dir)# 列出解压后的文件列表print(os.listdir(extract_dir))使用 gzip 模块解压 gzip 文件gzip 文件是一种常见的压缩文件格式,通常用于压缩单个文件。Python的标准库中提供了 gzip 模块来处理gzip文件。可以使用该模块来解压缩gzip文件,并访问其中的内容。123456789101112131415import gzipimport shutil# 定义gzip文件路径和解压文件路径gzip_file = 'data.gz'extracted_file = 'extracted_data.txt'# 解压gzip文件with gzip.open(gzip_file, 'rb') as f_in:    with open(extracted_file, 'wb') as f_out:        shutil.copyfileobj(f_in, f_out)# 打印解压后的文件内容with open(extracted_file, 'r') as f:    print(f.read())使用 tarfile 模块解压 tar 文件tar 文件是一种常见的归档文件格式,通常用于打包多个文件。Python的标准库中提供了 tarfile 模块来处理tar文件。可以使用该模块来解压缩tar文件,并访问其中的文件内容。123456789101112import tarfile# 定义tar文件路径和解压目录tar_file = 'data.tar'extract_dir = 'extracted_data'# 解压tar文件with tarfile.open(tar_file, 'r') as tar_ref:    tar_ref.extractall(extract_dir)# 列出解压后的文件列表print(os.listdir(extract_dir))使用 bz2 模块解压 bz2 文件bz2 文件是一种常见的压缩文件格式,通常用于压缩单个文件。Python的标准库中提供了 bz2 模块来处理bz2文件。可以使用该模块来解压缩bz2文件,并访问其中的内容。1234567891011121314import bz2# 定义bz2文件路径和解压文件路径bz2_file = 'data.bz2'extracted_file = 'extracted_data.txt'# 解压bz2文件with bz2.open(bz2_file, 'rb') as f_in:    with open(extracted_file, 'wb') as f_out:        shutil.copyfileobj(f_in, f_out)# 打印解压后的文件内容with open(extracted_file, 'r') as f:    print(f.read())使用 shutil.unpack_archive 函数解压任意类型的压缩文件shutil 模块提供了 unpack_archive 函数,可以解压任意类型的压缩文件,无需事先知道文件的压缩格式。该函数会根据文件的扩展名自动选择合适的解压方法。1234567891011import shutil# 定义压缩文件路径和解压目录archive_file = 'data.gz'extract_dir = 'extracted_data'# 解压文件shutil.unpack_archive(archive_file, extract_dir)# 列出解压后的文件列表print(os.listdir(extract_dir))使用第三方库解压其他格式的文件除了Python标准库中提供的模块外,还有一些第三方库可以用来解压其他格式的文件,如 rarfile 用于解压RAR文件, py7zr 用于解压7z文件等。这些库提供了更多的功能和灵活性,可以满足更复杂的解压需求。123456789101112import rarfile# 定义RAR文件路径和解压目录rar_file = 'data.rar'extract_dir = 'extracted_data'# 解压RAR文件with rarfile.RarFile(rar_file, 'r') as rar_ref:    rar_ref.extractall(extract_dir)# 列出解压后的文件列表print(os.listdir(extract_dir))处理压缩文件中的数据在解压缩压缩文件后,通常需要对解压后的数据进行进一步处理。1. 读取文本文件内容如果压缩文件中包含文本文件,可以直接读取解压后的文本文件内容。123456extracted_file = 'extracted_data.txt'with open(extracted_file, 'r') as f:    content = f.read()print(content)2. 使用 pandas 读取压缩文件中的数据如果压缩文件中包含结构化数据,如CSV文件,可以使用 pandas 库来读取数据。123456import pandas as pdcsv_file = 'data.csv.gz'df = pd.read_csv(csv_file)print(df)3. 处理二进制数据如果压缩文件中包含二进制数据,可以使用二进制模式打开文件,并读取数据。123456binary_file = 'binary_data.bin'with open(binary_file, 'rb') as f:    data = f.read()print(data)4. 解析压缩文件中的 XML 或 JSON 数据如果压缩文件中包含 XML 或 JSON 数据,可以使用相应的库来解析数据。123456789101112131415161718192021import xml.etree.ElementTree as ETxml_file = 'data.xml.gz'with gzip.open(xml_file, 'rb') as f:    tree = ET.parse(f)    root = tree.getroot()# 处理 XML 数据for child in root:    print(child.tag, child.attrib)import jsonjson_file = 'data.json.gz'with gzip.open(json_file, 'rb') as f:    data = json.load(f)# 处理 JSON 数据print(data)
  • [技术干货] 新手入门——免费可直接在线运行Python代码的平台推荐
    以下是一些常见的、免费的、可直接在线运行Python代码的平台及对应的网址:Repl.it:网址:cid:link_1简介:这是一个基于Web的多语言在线IDE,用户可以在这个平台上直接编写、运行和分享Python代码。Ideone:网址:cid:link_8简介:这是一个在线编程环境,支持Python 2和Python 3,用户可以在多种编程语言中运行和分享代码。它还能直接从GitHub、Bitbucket等平台导入代码。PythonAnywhere:网址:cid:link_2简介:PythonAnywhere提供了一个完整的Python开发环境,包括一个在线的Python解释器、编辑器、数据库等。Trinket:网址:cid:link_9简介:Trinket是一个在线的代码编辑器,支持Python等多种编程语言。Codecademy Labs:网址:cid:link_3简介:Codecademy是一家提供在线编程课程的网站,它的实验室环境可以让学生在线编写和运行Python代码。Azure Notebooks:网址:cid:link_4简介:Azure Notebooks是一个免费的Jupyter笔记本服务,它允许你在云端创建和共享包含实时代码、方程、可视化和解释性文本的文档。Google Colab:网址:cid:link_0简介:Google Colaboratory(简称“Colab”)是Jupyter笔记本的免费Jupyter主机服务,它不需要进行任何设置,并且完全在云端运行。请注意,虽然这些平台是免费的,但它们可能有一些使用限制或广告,这取决于具体的平台和它们的商业模式。此外,这些平台的可用性和功能可能会随着时间的推移而发生变化,建议在实际使用前查看最新的文档和教程。同时,我还想推荐一些免费的学习网站,它们提供了丰富的Python教程和文档,可以帮助你更好地学习和使用Python:哔哩哔哩:cid:link_6简介:作为中国最大的视频学习网站之一,哔哩哔哩上有大量的Python教学视频,包括从入门到进阶的各种教程。CSDN:cid:link_7简介:CSDN是一个拥有大量开发者用户的社区,上面有许多关于Python的教程、博客和讨论,是学习Python的好去处。W3school:cid:link_5简介:这是一个提供多种编程语言教程的网站,包括Python的详细讲解和实战案例,非常适合初学者。这些平台都提供了丰富的资源和教程,可以帮助你学习和实践Python编程。不过,请注意,虽然这些资源是免费的,但学习编程仍然需要付出时间和努力。
  • [技术干货] 谁是2020年最强Python库?年度Top10出炉【转】
    2020年已经过去了,国外的一家专门提供Python服务的网站Troy Labs,盘点出了2020年发布的Python库Top10。上榜的有FastAPI的升级版Typer、将CLI变成彩色的Rich、基于GUI框架的Dear PyGui、还有精简报错信息的PrettyErrors……总有一款是你想要的。下面就让我们一起来看看吧~1、TyperTyper跟FastAPI的原理相同,都是Python上用来构建API服务的一个高性能框架。它是FastAPI的升级版,不仅能够准确地记录代码,还能够轻松地进行CLI验证。Typer易于学习和使用,不需要用户阅读复杂的教程文档即可上手。支持编辑器(如VSCode)代码自动补全,提高开发人员的开发效率,减少bug的数量。其次,Typer还能配合命令行神器Click使用,就可以利用Click的优点和插件,实现更复杂的功能。开源地址:https://github.com/tiangolo/typer2、Rich谁规定CLI界面一定得是黑白的?它也可以是彩色的。Rich API不仅能够在终端输出提供丰富的彩色文本和精美的格式,还提供了精美的表格、进度条、编辑器、追踪器、语法高亮等。如下图所示。它还可以安装在Python REPL上,所有的数据结构都可以漂亮地输出或标注。总而言之,它是彩色的、漂亮的、强大的。Rich兼容性也不错,适用于Linux,Mac和Windows等多种系统。真彩色/表情符号可与新的Windows终端一起使用。但是请注意,Rich必须要Python 3.6.1或以上版本。开源地址:https://github.com/willmcgugan/rich3、Dear PyGui如上所示,虽然终端应用程序可以做成很漂亮的样子。但是,你可能还需要一个真正的GUI。Dear PyGui是一个便于使用、功能强大的Python GUI框架。但是它与其他的Python GUI却有着根本上的不同。它使用了即时模式范式和计算机的GPU来实现动态界面。即时模式范式在视频游戏中非常流行,这意味着它的动态GUI不需要保留任何数据,而是逐帧独立绘制的。同时,它还使用GPU来建构动态界面。Dear PyGui还可以绘图、创建主题、创建2D游戏,还拥有一些小工具,比如说内置文档、日志记录、源代码查看器之类的,这些小工具可以协助App的开发。支持它的系统有:Windows 10(DirectX 11),Linux(OpenGL 3)和macOS(Metal)等。开源地址:https://github.com/hoffstadt/DearPyGui4、PrettyErrorsPrettyErrors是一个精简Python错误信息的工具,特点是界面十分简洁友好。它最显著的功能是支持在终端进行彩色输出,标注出文件栈踪迹,发现错误信息,过滤掉冗余信息,提取出关键部分,并且进行彩色标注,从而提高开发者的效率。而且它可以不用安装,直接被导入项目中使用,但是需要先配置一些参数,其导入和配置的参数如下:开源地址:https://github.com/onelivesleft/PrettyErrors5、Diagrams程序员在编程的时候,有时候需要跟同事解释他设计的程序代码之间复杂的结构关系,然而这不是一两句话能说清楚的,需要画表或者做脉络图。一般情况下,程序员使用GUI工具处理图表,并将文稿进行可视化处理。但是还有更好的方法,比如说使用Diagrams库。Diagrams让不需要任何设计类工具,直接在Python代码中绘制云系统结构。它们的图标来自多家云服务商,包括AWS, Azure, GCP等。仅需几行代码,就可以简单地创造出箭头符号和结构图。由于它使用Graphviz来渲染图,所以还需要先安装好Graphviz。开源地址:https://github.com/mingrammer/diagrams6、Hydra and OmegaConf在做机器学习项目的时候,需要做一大堆的环境配置工作。因此,在一些复杂的应用程序中,配置管理工作也相应变得复杂。Hydra可以使配置工作变得简单。它能够从命令行或者配置文件中覆盖部分出来,无需维护相似的配置文件,用组合的方式进行配置,从而加快了实验运行速度。Hydra兼容性强,拥有含插件的结构,能够很好地与开发者的操作文件融合。它的插件还可以实现直接通过命令行,就把代码发布到AWS或者其他云端系统。Hydra也离不开OmegaConf,两者关系密不可分,OmegaConf为Hydra的分层配置系统提供了协同的API,二者协同运作可支持YAML、配置文件、对象、CLI参数等。开源地址:https://github.com/facebookresearch/hydrahttps://github.com/omry/omegaconf7、PyTorch LightningPyTorch Lightning也是Facebook的一个研究成果。它是一个轻巧的PyTorch包装器,用于高性能AI研究,其最重要的特征是能够解析PyTorch代码,让代码研究成分和工程成分的分离。它的扩展模型可以在任何硬件(CPU、GPU、TPU)上运行,且容易被复制,删除了大量的文件样本,保持了自身的灵活性,运行速度快。Lightning能够使DL / ML研究的40多个部分实现自动化,例如GPU训练、分布式GPU(集群)训练、TPU训练等等……因为Lightning将可以将文件自动导出到ONNX或TorchScript,所以它适用于进行快速推理的AI研究员、BERT或者自监督学习的研究团队等。开源地址:https://github.com/PyTorchLightning/PyTorch-lightning8、HummingbirdHummingbird是微软的一项研究成果,它能够将已经训练好的ML模型汇编成张量计算,从而不需要设计新的模型。还允许用户使用神经网络框架(例如PyTorch)来加速传统的ML模型。它的推理API跟sklearn范例十分相似,都可以重复使用现有的代码,但是它是用Hummingbird生成的代码去实现的。Hummingbird还在Sklearn API之后提供了一个方便的统一推理API。这样就可以将Sklearn模型与Hummingbird生成的模型互换,而无需更改推理代码。它之所以被重点关注,还因为它能够支持多种多样的模型和格式。到目前为止,Hummingbird支持PyTorch、TorchScript、ONNX和TVM等各种ML模型。开源地址:https://github.com/microsoft/hummingbird9、HiPlot由于ML模型变得越来越复杂,还有很多超参数,于是就需要用到HiPlot。HiPlot是今年3月Facebook发行的一个库,主要用于处理高维数据。Facebook AI通过几十个超参数和10万多个实验,利用HiPlot,来分析深度神经网络。它是用平行图和其他的图像方式,帮助AI研究者发现高维数据的相关性和模型,是一款轻巧的交互式可视化工具。HiPlot与其他可视化工具相比,有其特有的优点:首先,它的互动性强,因为平行图是交互式的,所以能够满足多种情况下的图像可视化。其次,它简单易用,可以通过IPython Notebook或者通过带有“ hiplot”命令的服务直接使用。它还有具有可扩展性。默认情况下,HiPlot的Web服务可以解析CSV或JSON文件,还可以为其提供自定义Python解析器,将实验转换为HiPlot实验。开源地址:https://github.com/facebookresearch/hiplot参考链接:https://ai.facebook.com/blog/hiplot-high-dimensional-interactive-plots-made-easy10、ScaleneScalene是一个用于Python脚本的CPU和内存分析器,能够正确处理多线程代码,还能区分Python代码和本机代码的运行时间。你不需要修改代码,只需运行Scalene脚本,它就会生成一个文本形式的报告,显示出每一行代码的CPU和内存的使用情况。通过这个文本报告,开发人员可以提高代码的效率。Scalene的速度快、准确率高,还能够对高耗能的代码行进行标注。开源地址https://github.com/emeryberger/scalene除了以上10个,还有多个高性能的Python库被点名了,例如Norfair、Quart、Alibi-detect、Einops……等等,详情查看底部链接。那么,你今年有发现好用的Python库吗?如果有的话,请在评论区一起分享一下呀~参考链接:https://tryolabs.com/blog/2020/12/21/top-10-python-libraries-of-2020/https://www.upgrad.com/blog/reasons-why-python-popular-with-developers/转自 https://baijiahao.baidu.com/s?id=1687663074120099341&wfr=spider&for=pc
  • Python应用发布常见打包
    Python常见打包方式原生可以使用原生库distutils构建和打包Python模块扩展扩展的setuptools库进行构建和打包Python模块也可以使用pyinstaller打包等工具Python打包流程1、编写测试代码编写登录测试代码,便于后期打包后的验证2、编写打包脚本编写打包脚本,对版本、作者及所依赖的模块等信息进行说明Version用于描述版本信息Author用于用于描述作者信息。依赖注:Distutils -构建和安装Python模块Distutils(distutils — Building and installing Python modules — Python 3.9.5 documentation)软件包提供了将其它模块构建和安装到Python安装中的支持。新模块可以是100%纯的Python,也可以是用C编写的扩展模块,也可以是Python软件包的集合,其中包括以Python和c编码的模块3、打包安装步骤一:执行打包命令,通过脚本进行应用打包。打包完成后,在dist目录中生成对应的源码包步骤二:安装源码包到本地步骤三:使用freeze命令按照一定格式输出所需依赖列表,供其它开发者使用步骤四:其它开发者使用pip命令按照requirements.tx自动安装所需依赖requirements.txt可以是依赖的第三方包,也可以是自己打的包(前提是你已经上传到python管理的索引库)4、测试步骤一:编写测试脚本步骤二:运行测试脚本步骤三:通过pip list命令确定应用是否打包成功
  • [常见FAQ] 初赛正式赛
    正式赛当天,能否提交完代码后立即看回放调整代码,debug。
  • [教程] 函数工作流依赖打包实践教程(python)
    函数工作流依赖打包实践教程(python)首先官网已经给出了一个python环境下的打包方案,但是方案本身在一些复杂场景下可能会比较麻烦,因此本文给出一个通用的标准解决方案,来解决一些复杂打包场景。注意:打包场景需要在linux环境一、创建虚拟环境1.1 创建虚拟环境python -m venv <your path>在指定路径创建自己的虚拟环境1.2 激活虚拟环境source <venv>/bin/activate二、安装依赖包在完成虚拟环境安装与激活工作后,只需要在按照需求安装好自己的所需要的依赖。例如,我们这里安装一下Spacy,按照下面的步骤:pip install -U spacy python -m spacy download zh_core_web_sm三、打包安装完成后,进入到虚拟环境依赖的安装路径:<your path>/lib64/pythonx.x/site-packages/打包为压缩包。zip -rq <your dependency name>.zip *然后再通过FTP工具下载压缩包。四、上传压缩包,完成依赖包制作新建依赖包完成上述步骤后,即可完成一个python依赖包的制作。
  • [区域初赛赛题问题] 请问是如何得分的?是对泊位里面的ship使用go语句之后,在等待400ms吗?
    请问是如何得分的?是对泊位里面的ship使用go语句之后,在等待400ms吗?我将船运送到了泊位,然后让其等待了一会,然后就让它出发了,可是还是没有任何得分
  • [常见FAQ] python可以使用多线程吗
    python可以使用多线程吗
  • [容器类] acl.rt.set_device报507033错误
    """[EVENT] PROFILING(78,python):2024-03-11-02:22:20.914.096 [msprof_callback_impl.cpp:199] >>> (tid:78) Started to register profiling ctrl callback.[EVENT] PROFILING(78,python):2024-03-11-02:22:25.859.341 [msprof_callback_impl.cpp:78] >>> (tid:78) MsprofCtrlCallback called, type: 255[EVENT] PROFILING(78,python):2024-03-11-02:22:25.859.666 [prof_acl_mgr.cpp:1190] >>> (tid:78) Init profiling for dynamic profiling[ERROR] DRV(78,python):2024-03-11-02:22:34.958.504 [ascend][curpid: 78, 78][drv][tsdrv][drvDeviceOpen 360]open devdrv_device(0) failed, fd(-1), errno(14), error(Bad address).[ERROR] DRV(78,python):2024-03-11-02:22:34.958.716 [ascend][curpid: 78, 78][drv][tsdrv][share_log_read 569]invalid para, vdevid(0), devid(0), fid(0) invalid mode(1) or ctx is null.[ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.800 [npu_driver.cc:2012]78 DeviceOpen:[drv api] drvDeviceOpen failed: deviceId=0, drvRetCode=4![ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.809 [device.cc:227]78 Init:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.814 [device.cc:227]78 Init:Failed to open device, retCode=0x7020014, deviceId=0.[ERROR] RUNTIME(78,python):2024-03-11-02:22:34.958.833 [runtime.cc:2109]78 DeviceRetain:Failed to init device.[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.754 [runtime.cc:2133]78 DeviceRetain:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.935 [runtime.cc:2133]78 DeviceRetain:Check param failed, dev can not be NULL![ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.988 [runtime.cc:1946]78 PrimaryContextRetain:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.725.992 [runtime.cc:1946]78 PrimaryContextRetain:Check param failed, dev can not be NULL![ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.001 [runtime.cc:1973]78 PrimaryContextRetain:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.005 [runtime.cc:1973]78 PrimaryContextRetain:Check param failed, ctx can not be NULL![ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.013 [api_impl.cc:1315]78 NewDevice:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.017 [api_impl.cc:1315]78 NewDevice:Check param failed, context can not be null.[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.025 [api_impl.cc:1336]78 SetDevice:report error module_type=0, module_name=EE9999[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.029 [api_impl.cc:1336]78 SetDevice:new device failed, retCode=0x7010006[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.037 [logger.cc:615]78 SetDevice:Set device failed, device_id=0, deviceMode=0.[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.067 [api_c.cc:1469]78 rtSetDevice:ErrCode=507033, desc=[device retain error], InnerCode=0x7010006[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.071 [error_message_manage.cc:49]78 FuncErrorReason:report error module_type=3, module_name=EE8888[ERROR] RUNTIME(78,python):2024-03-11-02:22:35.726.079 [error_message_manage.cc:49]78 FuncErrorReason:rtSetDevice execute failed, reason=[device retain error][ERROR] ASCENDCL(78,python):2024-03-11-02:22:35.726.091 [device.cpp:66]78 aclrtSetDevice: open device 0 failed, runtime result = 507033.[EVENT] IDEDH(78,python):2024-03-11-02:22:39.586.549 [adx_server_manager.cpp:27][tid:78]>>> start to deconstruct adx server manager"""