-
大家好,本次带来的是5月份技术合集,其中包含了JavaScript,java,python,golang,openflow,linux供大家学习交流。 1.正则表达式常见密码验证方式总结大全【转】 https://bbs.huaweicloud.com/forum/thread-0235152528388647043-1-1.html 2.正则表达式中的$分组使用示例详解【转】 https://bbs.huaweicloud.com/forum/thread-0220152528348235034-1-1.html 3.正则表达式匹配双引号常用例子总结【转】 https://bbs.huaweicloud.com/forum/thread-02105152528298749035-1-1.html 4.python和JavaScript的正则表达式详细使用对比【转】 https://bbs.huaweicloud.com/forum/thread-0220152524278914033-1-1.html 5.日期校验 / 时间校验正则表达式深入解析(超实用!)【转】 https://bbs.huaweicloud.com/forum/thread-0297152524193613042-1-1.html 6.Python使用xpath对解析内容进行数据提取【转】 https://bbs.huaweicloud.com/forum/thread-02105152523702186034-1-1.html 7.基于Go实现TCP长连接上的请求数控制【转】 https://bbs.huaweicloud.com/forum/thread-0249152523497606033-1-1.html 8.Golang使用原生http实现中间件的代码详解【转】 https://bbs.huaweicloud.com/forum/thread-0297152523442936041-1-1.html 9.Python中GPU计算的库pycuda的使用【转】 https://bbs.huaweicloud.com/forum/thread-0297152523272604040-1-1.html 10.python打印exception信息的方法【转】 https://bbs.huaweicloud.com/forum/thread-0297152522000640037-1-1.html 11.详解如何利用Python代码删除Word文档空白行【转】 https://bbs.huaweicloud.com/forum/thread-0220152518833622030-1-1.html 12.使用Python和大模型进行数据分析和文本生成【转】 https://bbs.huaweicloud.com/forum/thread-0266152521305596026-1-1.html 13.使用Python进行数据清洗和预处理的实现代码【转】 https://bbs.huaweicloud.com/forum/thread-02127152520239578032-1-1.html 14.使用Python进行物联网设备的控制与数据收集【转】 https://bbs.huaweicloud.com/forum/thread-0235152519161548040-1-1.html 15.利用Python自动化识别与删除Excel表格空白行和列【转】 https://bbs.huaweicloud.com/forum/thread-0249152519105690032-1-1.html 16.通用数据模型 https://bbs.huaweicloud.com/forum/thread-02127152343988086023-1-1.html 17.容器网络 https://bbs.huaweicloud.com/forum/thread-0219152343799742022-1-1.html 18.BFD for openflow https://bbs.huaweicloud.com/forum/thread-02127152343656881022-1-1.html 19.Linux systemd 定时任务 https://bbs.huaweicloud.com/forum/thread-0235152250634012021-1-1.html 20.Linux启动过程以及7种运行级别 https://bbs.huaweicloud.com/forum/thread-0266152250544314007-1-1.html
-
前言正则表达式在 Python 和 JavaScript 中都是一种强大的工具,用于匹配、搜索和操作字符串。尽管它们在基本语法上相似,但也存在一些差异。以下是 Python 和 JavaScript 在正则表达式的构造和使用上的主要比较:1 正则表达式的构造和使用特性PythonJavaScript导入库使用 re 模块无需导入,直接内置定义正则表达式re.compile(r"pattern")/pattern/flags 或 new RegExp("pattern", "flags")匹配全部re.findall(pattern, string)string.match(/pattern/g) 或 string.matchAll(/pattern/g)搜索(找到第一个匹配项)re.search(pattern, string)string.match(/pattern/) 或 string.search(/pattern/)search 仅返回第一个匹配的位置。替换re.sub(pattern, repl, string)string.replace(/pattern/g, repl)分割字符串re.split(pattern, string)string.split(/pattern/)忽略大小写标志re.IGNORECASE 或 'i''i'多行匹配标志re.MULTILINE 或 'm''m'点号匹配任意字符(包括换行符)re.DOTALL 或 's'无直接等价,可使用[^]来匹配任意字符包括换行Unicode匹配re.UNICODE 或 'u'使用'u'标志下面分别用 Python 和 JavaScript 的示例代码展示正则表达式的常用操作,包括匹配、搜索、分割、替换、量词、正向声明、反向声明、表达式分组和子表达式引用
-
一、前言在前面的文章当中,已经教大家如何去获取我们需要的数据原文内容,今天就介绍一个用于提取所需数据的方法之一xpath。在后续会讲解bs4(beautifulsoup),re正则表达式。二、正文XPath 使用路径表达式来选取HTML/ XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。使用到python中的一个lxml库:下载 pip install lxml选取节点表达式描述nodename选取此节点的所有子节点。/从根节点选取(取子节点)。//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。.选取当前节点。..选取当前节点的父节点。@选取属性。路径表达式路径表达式结果bookstore选取 bookstore 元素的所有子节点。/bookstore选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!bookstore/book选取属于 bookstore 的子元素的所有 book 元素。//book选取所有 book 子元素,而不管它们在文档中的位置。bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。//@lang选取名为 lang 的所有属性。谓语谓语用来查找某个特定的节点或者包含某个指定的值的节点。谓语被嵌在方括号中。路径表达式结果/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。选取未知节点通配符描述*匹配任何元素节点。@*匹配任何属性节点。node()匹配任何类型的节点。--- 在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:路径表达式结果/bookstore/*选取 bookstore 元素的所有子元素。//*选取文档中的所有元素。//title[@*]选取所有带有属性的 title 元素。选取若干节点通过在路径表达式中使用"|"运算符,您可以选取若干个路径。路径表达式结果//book/title//book/price选取 book 元素的所有 title 和 price 元素。//title//price选取文档中的所有 title 和 price 元素。/bookstore/book/title//price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。三、示例下面给出一个示例代码 # -*- coding:utf-8 -*- import requests from lxml import etree class DouGuo(object): def __init__(self): self.url = "https://www.douguo.com/caipu/%E5%AE%B6%E5%B8%B8%E8%8F%9C/0/20" self.headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36" } def get_data_index(self): response = requests.get(self.url, headers=self.headers) response.encoding="utf-8" if response.status_code == 200: return response.text else: return None def parse_data_index(self, response): html = etree.HTML(response) data_list = html.xpath('//ul[@class="cook-list"]//li[@class="clearfix"]') for data in data_list: # 提取文本值 title = data.xpath("./div/a/text()")[0] major = data.xpath("./div/p/text()")[0] # 提取属性值 head = data.xpath("./div/div[2]/a/img/@alt")[0] score = data.xpath("./div/div[1]//span/text()")[0] print(f"title: {title}\nmajor: {major}\nhead:{head}\nscore:{score}\n\n") def run(self): response = self.get_data_index() # print(response) self.parse_data_index(response) if __name__ == '__main__': spider = DouGuo() spider.run()
-
前言pycuda 是一个用于在 Python 中进行 GPU 计算的库,它结合了 Python 的易用性和 NVIDIA CUDA 并行计算的性能优势。本文将详细介绍 PyCUDA 库的特性、用法,并通过丰富的示例代码展示其在实际项目中的应用。pycuda 简介PyCUDA 是一个基于 NVIDIA CUDA 的 Python 库,用于在 GPU 上进行高性能计算。它提供了与 CUDA C 类似的接口,可以方便地利用 GPU 的并行计算能力进行科学计算、机器学习、深度学习等领域的计算任务。安装 pycuda 库要开始使用 pycuda 库,首先需要安装它。可以通过 pip 命令来安装 pycuda:1pip install pycuda安装完成后,可以在 Python 代码中导入 pycuda 库,并开始使用其提供的功能。import pycuda.autoinit import pycuda.driver as cuda PyCUDA 的基本用法通过几个示例来展示 pycuda 库的基本用法。 1. 向量加法 import pycuda.autoinit import pycuda.gpuarray as gpuarray # 定义两个向量 a = gpuarray.to_gpu([1, 2, 3, 4]) b = gpuarray.to_gpu([5, 6, 7, 8]) # 执行向量加法 c = a + b print(c) 以上示例使用 pycuda 实现了两个向量的加法操作,利用 GPU 的并行计算能力加速了计算过程。 2. 矩阵乘法 import numpy as np import pycuda.autoinit import pycuda.gpuarray as gpuarray import pycuda.driver as cuda from pycuda.elementwise import ElementwiseKernel # 定义矩阵 A = np.random.randn(3, 3).astype(np.float32) B = np.random.randn(3, 3).astype(np.float32) # 将矩阵上传到 GPU d_A = cuda.mem_alloc(A.nbytes) d_B = cuda.mem_alloc(B.nbytes) cuda.memcpy_htod(d_A, A) cuda.memcpy_htod(d_B, B) # 定义矩阵乘法的内核函数 matmul_kernel = ElementwiseKernel( "float *A, float *B, float *C", "C[i] = A[i] * B[i]", "matmul_kernel" ) # 执行矩阵乘法 C = gpuarray.empty_like(A) matmul_kernel(d_A, d_B, C) # 从 GPU 获取结果 result = np.empty_like(C.get()) cuda.memcpy_dtoh(result, C) print(result) 以上示例使用 pycuda 实现了矩阵乘法操作,利用 GPU 的并行计算能力加速了矩阵乘法的计算过程。PyCUDA 的高级用法除了基本的用法之外,pycuda 还提供了一些高级功能,以满足更复杂的 GPU 计算需求。 1. 使用 CUDA 核函数 import numpy as np import pycuda.autoinit import pycuda.gpuarray as gpuarray import pycuda.driver as cuda from pycuda.compiler import SourceModule # 定义 CUDA 核函数 mod = SourceModule(""" __global__ void add(int *a, int *b, int *c) { int idx = threadIdx.x + blockIdx.x * blockDim.x; c[idx] = a[idx] + b[idx]; } """) # 获取核函数 add_func = mod.get_function("add") # 定义输入数据 a = np.array([1, 2, 3, 4]).astype(np.int32) b = np.array([5, 6, 7, 8]).astype(np.int32) c = np.zeros_like(a) # 将数据上传到 GPU d_a = gpuarray.to_gpu(a) d_b = gpuarray.to_gpu(b) d_c = gpuarray.to_gpu(c) # 执行核函数 block_size = 4 grid_size = len(a) // block_size add_func(d_a, d_b, d_c, block=(block_size, 1, 1), grid=(grid_size, 1)) # 从 GPU 获取结果 result = d_c.get() print(result) 以上示例使用 pycuda 实现了使用 CUDA 核函数进行向量加法操作,利用 GPU 的并行计算能力加速了计算过程。实际项目中的应用在实际项目中,pycuda 库可以应用于许多领域,包括科学计算、机器学习、深度学习等。 1. 科学计算pycuda 在科学计算领域具有广泛的应用,特别是在处理大规模数据和复杂计算任务时能发挥出色的性能优势。以下是一个利用 pycuda 进行矩阵运算加速的示例: import numpy as np import pycuda.autoinit import pycuda.gpuarray as gpuarray from pycuda.elementwise import ElementwiseKernel # 定义矩阵运算内核函数 matmul_kernel = ElementwiseKernel( "float *A, float *B, float *C", "C[i] = A[i] * B[i]", "matmul_kernel" ) # 创建随机矩阵 A = np.random.randn(1000, 1000).astype(np.float32) B = np.random.randn(1000, 1000).astype(np.float32) # 将矩阵上传到 GPU d_A = gpuarray.to_gpu(A) d_B = gpuarray.to_gpu(B) d_C = gpuarray.empty_like(d_A) # 执行矩阵运算内核函数 matmul_kernel(d_A, d_B, d_C) # 从 GPU 获取结果 result = d_C.get() print(result)
-
一直以为掌握以下内容就够了。1234567891011try: #正常执行语句 passexcept: #如果正常执行语句不对,执行替代语句 passfinally: ''' 不论正常执行语句执行如何,最后都会执行. finally这部分可以省略''' pass因为我try部分写的业务逻辑复杂,配置了多少活动,就跑多少个。在生产运行的时候,非常害怕因为一个活动的某些原因报错,导致后续活动都无法正常计算。报错类型我也不能保证是哪一种,就这样了。但如果失败,不打印失败信息,我要把try…except语句去掉运行,重跑一次看错误信息。但有一次真的生产上某些活动失败了,改脚本和重启有点费劲,就知道下次不能这么干了。应该要再细化一下1234567891011import tracebacktry: #正常执行语句 passexcept Exception as e: traceback.print_exc() # 打印异常信息和堆栈跟踪finally: ''' 不论正常执行语句执行如何,最后都会执行 finally这部分可以省略''' pass
-
如何使用Python和大模型进行数据分析和文本生成Python语言以其简洁和强大的特性,成为了数据科学、机器学习和人工智能开发的首选语言之一。随着大模型(Large Language Models, LLMs)如GPT-4的崛起,我们能够利用这些模型实现诸多复杂任务,从文本生成到智能对话、数据分析等等。在这篇文章中,我将介绍如何用Python连接和使用大模型,并通过示例展示如何在实际项目中应用这些技术。一、为何选择Python连接大模型?Python作为一种高度灵活的编程语言,拥有丰富的库和工具,特别适合用于连接大模型的开发和应用。以下是一些选择Python的理由:易于学习和使用:Python语法简洁,易于上手,开发者可以迅速编写和调试代码。丰富的生态系统:Python拥有大量的第三方库和工具,如TensorFlow、PyTorch、Transformers等,极大地简化了大模型的开发和应用。社区支持:Python社区活跃,开发者可以方便地获取支持和资源,解决开发过程中遇到的问题。二、使用Transformers库连接大模型Transformers库由Hugging Face公司开发,是连接和使用大模型的首选工具之一。该库支持众多预训练模型,并提供简洁的接口来加载和使用这些模型。下面,我们通过一个简单的示例展示如何使用Transformers库连接GPT-4模型。安装Transformers库首先,我们需要安装Transformers库。可以使用以下命令通过pip安装:1pip install transformers加载和使用GPT-4模型安装完成后,我们可以通过以下代码加载和使用GPT-4模型进行文本生成: from transformers import GPT4LMHeadModel, GPT2Tokenizer # 加载预训练的GPT-4模型和对应的分词器 model_name = "gpt-4" model = GPT4LMHeadModel.from_pretrained(model_name) tokenizer = GPT2Tokenizer.from_pretrained(model_name) # 定义输入文本 input_text = "Python语言是一种高度灵活的编程语言,它的应用范围非常广泛。" # 将输入文本编码为模型输入 input_ids = tokenizer.encode(input_text, return_tensors="pt") # 生成文本 output = model.generate(input_ids, max_length=100, num_return_sequences=1) # 解码生成的文本 generated_text = tokenizer.decode(output[0], skip_special_tokens=True) print("生成的文本:", generated_text) 这段代码首先加载了预训练的GPT-4模型和对应的分词器,然后对输入文本进行编码,并使用模型生成文本。最后,将生成的文本解码并打印出来。通过这种方式,我们可以轻松实现基于大模型的文本生成任务。三、将大模型集成到应用中在实际项目中,我们通常需要将大模型集成到更复杂的应用中。例如,可以将大模型嵌入到Web应用、聊天机器人、数据分析工具等。这里,我们以一个简单的Web应用为例,展示如何使用Flask框架将GPT-4模型集成到Web应用中。使用Flask创建Web应用Flask是一个轻量级的Python Web框架,非常适合快速开发和部署Web应用。我们可以使用Flask创建一个简单的Web界面,允许用户输入文本,并使用GPT-4模型生成回复。首先,安装Flask:1pip install flask然后,创建一个简单的Flask应用: from flask import Flask, request, jsonify from transformers import GPT4LMHeadModel, GPT2Tokenizer app = Flask(__name__) # 加载预训练的GPT-4模型和分词器 model_name = "gpt-4" model = GPT4LMHeadModel.from_pretrained(model_name) tokenizer = GPT2Tokenizer.from_pretrained(model_name) @app.route('/generate', methods=['POST']) def generate_text(): input_text = request.json.get('text') input_ids = tokenizer.encode(input_text, return_tensors="pt") output = model.generate(input_ids, max_length=100, num_return_sequences=1) generated_text = tokenizer.decode(output[0], skip_special_tokens=True) return jsonify({"generated_text": generated_text}) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) 在这个示例中,我们创建了一个简单的Flask应用,并定义了一个生成文本的API接口。用户可以通过发送POST请求到/generate端点,并提供输入文本,获得由GPT-4模型生成的回复。运行应用保存上述代码到一个文件(如app.py),然后在命令行中运行:1python app.py四、提升大模型应用性能的小技巧在实际应用中,使用大模型可能会面临性能和效率问题。以下是一些提升性能的小技巧:模型压缩和量化:通过模型压缩和量化技术,可以减少模型的大小和计算资源需求,提高推理速度。批处理请求:将多个请求合并为一个批处理请求,可以提高处理效率,减少响应时间。缓存机制:对于常见请求结果,可以使用缓存机制减少重复计算,提高响应速度。异步处理:使用异步处理技术,可以更高效地利用计算资源,提高并发处理能力。
-
使用Python进行数据清洗和预处理数据清洗和预处理是数据科学和机器学习项目中的关键步骤。这些步骤确保了数据的质量和一致性,从而为后续的分析和建模提供了坚实的基础。Python作为数据科学领域的热门编程语言,提供了丰富的库和工具来处理和清洗数据。本文将介绍如何使用Python进行数据清洗和预处理,并提供相应的代码示例。1. 导入必要的库在开始数据清洗和预处理之前,我们需要导入一些常用的库。这些库包括Pandas用于数据操作,NumPy用于数值计算,以及Matplotlib和Seaborn用于数据可视化。import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns2. 读取数据首先,我们需要读取数据。Pandas支持多种数据格式的读取,如CSV、Excel、SQL等。在这里,我们将使用一个CSV文件作为示例。# 读取CSV文件data = pd.read_csv('data.csv')# 查看数据的前几行print(data.head())3. 数据探索与概览在对数据进行清洗之前,我们需要对数据进行初步的探索和概览。这包括查看数据的基本信息、统计描述、缺失值情况等。# 查看数据的基本信息print(data.info())# 查看数据的统计描述print(data.describe())# 查看缺失值情况print(data.isnull().sum())4. 处理缺失值缺失值是数据清洗中的常见问题。处理缺失值的方法包括删除含有缺失值的行或列,用均值、中位数或众数填充缺失值,或者使用插值法填充缺失值。# 删除含有缺失值的行data_cleaned = data.dropna()# 用均值填充缺失值data_filled = data.fillna(data.mean())# 使用插值法填充缺失值data_interpolated = data.interpolate()5. 处理重复值数据中的重复值可能导致模型的过拟合,因此需要去重。# 删除重复值data_deduplicated = data.drop_duplicates()6. 数据类型转换有时数据类型不符合要求,需要进行转换。例如,将字符串类型的日期转换为日期类型。# 将字符串类型的日期转换为日期类型data['date'] = pd.to_datetime(data['date'])# 将分类数据转换为数值类型data['category'] = data['category'].astype('category').cat.codes7. 数据标准化与归一化为了使不同特征具有相同的尺度,可以对数据进行标准化(均值为0,标准差为1)或归一化(将数据缩放到0-1范围内)。from sklearn.preprocessing import StandardScaler, MinMaxScaler# 标准化scaler = StandardScaler()data_standardized = scaler.fit_transform(data)# 归一化scaler = MinMaxScaler()data_normalized = scaler.fit_transform(data)8. 处理异常值异常值可能会影响模型的性能,因此需要对其进行处理。常用的方法包括箱线图法和Z分数法。# 使用箱线图法检测和处理异常值Q1 = data.quantile(0.25)Q3 = data.quantile(0.75)IQR = Q3 - Q1data_outlier_removed = data[~((data < (Q1 - 1.5 * IQR)) |(data > (Q3 + 1.5 * IQR))).any(axis=1)]# 使用Z分数法检测和处理异常值from scipy import statsdata_zscore = data[(np.abs(stats.zscore(data)) < 3).all(axis=1)]9. 特征工程特征工程是通过创建新特征或对现有特征进行转换来提高模型性能的过程。常见的操作包括特征组合、特征分解和特征选择。# 创建新特征:日期特征分解data['year'] = data['date'].dt.yeardata['month'] = data['date'].dt.monthdata['day'] = data['date'].dt.day# 特征组合data['total_amount'] = data['quantity'] * data['price']10. 数据可视化数据可视化可以帮助我们更好地理解数据的分布和特征。常用的可视化方法包括直方图、箱线图、散点图等。# 绘制直方图data['column_name'].hist()plt.show()# 绘制箱线图data.boxplot(column='column_name')plt.show()# 绘制散点图plt.scatter(data['column1'], data['column2'])plt.show()11. 特征选择特征选择是指从原始数据中选择对模型有用的特征,以提高模型的性能和训练速度。常见的方法有过滤法、嵌入法和包裹法。11.1 过滤法过滤法根据统计指标来选择特征。例如,可以使用皮尔逊相关系数来选择与目标变量相关性较高的特征。# 计算与目标变量的相关系数correlation = data.corr()print(correlation['target_variable'].sort_values(ascending=False))11.2 嵌入法嵌入法通过模型来选择特征。例如,使用Lasso回归模型进行特征选择。from sklearn.linear_model import Lasso# 使用Lasso进行特征选择lasso = Lasso(alpha=0.1)lasso.fit(data.drop('target_variable', axis=1), data['target_variable'])selected_features = data.columns[lasso.coef_ != 0]print(selected_features)
-
使用Python进行物联网设备控制与数据收集物联网(IoT,Internet of Things)是当前技术领域的热门话题,它通过互联网将各种物理设备连接起来,使它们能够进行数据交换和远程控制。Python作为一种高效且易于学习的编程语言,已经成为开发物联网应用的首选语言之一。本文将探讨如何使用Python进行物联网设备的控制与数据收集,并提供相应的代码示例。1. 物联网架构概述典型的物联网系统包含以下几个部分:传感器和执行器:用于数据收集和设备控制的硬件组件。通信网络:负责数据传输的网络,包括Wi-Fi、蓝牙、Zigbee等。数据处理和存储:用于处理和存储收集到的数据的服务器或云平台。用户接口:用户与系统交互的界面,如手机App或Web应用。在这种架构下,Python可以用于多个层面,包括设备控制、数据收集、数据处理以及用户接口的开发。2. 使用Python控制物联网设备为了展示如何使用Python控制物联网设备,我们以控制一个简单的LED灯为例。我们将使用Raspberry Pi作为硬件平台,并通过GPIO(通用输入输出)接口控制LED灯的开关。硬件准备一块Raspberry Pi一个LED灯一个电阻杜邦线若干连接电路将LED灯的正极(长脚)通过电阻连接到Raspberry Pi的GPIO17引脚,负极(短脚)连接到Raspberry Pi的GND引脚。控制代码我们将使用Python的RPi.GPIO库来控制GPIO引脚。首先,安装该库:1pip install RPi.GPIO然后,编写如下Python代码: import RPi.GPIO as GPIO import time # 设置GPIO模式为BCM GPIO.setmode(GPIO.BCM) # 设置GPIO17为输出模式 GPIO.setup(17, GPIO.OUT) try: while True: # 打开LED GPIO.output(17, GPIO.HIGH) time.sleep(1) # 关闭LED GPIO.output(17, GPIO.LOW) time.sleep(1) except KeyboardInterrupt: pass finally: # 清理GPIO状态 GPIO.cleanup() 该代码将GPIO17引脚设置为输出模式,并通过在高电平和低电平之间切换来控制LED灯的开关,实现每秒闪烁一次的效果。3. 使用Python进行数据收集在物联网应用中,数据收集是另一个关键环节。我们可以使用各种传感器(如温度传感器、湿度传感器等)来收集环境数据,并将这些数据上传到服务器或云平台进行处理和存储。这里,我们以DHT11温湿度传感器为例,演示如何使用Python收集环境数据。硬件准备一块Raspberry Pi一个DHT11温湿度传感器杜邦线若干连接电路将DHT11的VCC引脚连接到Raspberry Pi的3.3V引脚,GND引脚连接到Raspberry Pi的GND引脚,数据引脚连接到Raspberry Pi的GPIO4引脚。数据收集代码我们将使用Adafruit_DHT库来读取DHT11传感器的数据。首先,安装该库:1pip install Adafruit_DHT然后,编写如下Python代码: import Adafruit_DHT import time # 设置传感器类型为DHT11 sensor = Adafruit_DHT.DHT11 # 设置传感器引脚为GPIO4 pin = 4 while True: # 读取温度和湿度数据 humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: print(f'Temperature: {temperature:.1f}°C Humidity: {humidity:.1f}%') else: print('Failed to get reading. Try again!') # 每隔2秒读取一次 time.sleep(2) 该代码通过Adafruit_DHT.read_retry()函数从DHT11传感器读取温度和湿度数据,并将数据输出到控制台。每隔2秒读取一次数据。4. 数据上传与处理收集到的数据通常需要上传到服务器或云平台进行进一步处理和分析。我们可以使用HTTP协议将数据发送到一个RESTful API。这里我们假设已有一个可以接收POST请求的API端点。上传数据代码我们将使用requests库将数据发送到API端点。首先,安装该库:1pip install requests然后,编写如下Python代码: import Adafruit_DHT import time import requests # 设置传感器类型为DHT11 sensor = Adafruit_DHT.DHT11 # 设置传感器引脚为GPIO4 pin = 4 # API端点URL url = 'http://example.com/api/data' while True: # 读取温度和湿度数据 humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: # 准备数据 data = { 'temperature': temperature, 'humidity': humidity } # 发送POST请求 response = requests.post(url, json=data) if response.status_code == 200: print('Data uploaded successfully') else: print('Failed to upload data') else: print('Failed to get reading. Try again!') # 每隔2秒读取一次 time.sleep(2)
-
引言在处理Excel数据时,经常会遇到含有空白行和空白列的情况。这些空白区域不仅占用表格显示空间,还可能导致数据分析时出现偏差,影响数据处理的效率与结果的准确性,如空白行可能干扰数据聚合操作,导致统计计数不准确;空白列则可能误导数据解析逻辑,影响后续的数据分析流程。因此,删除Excel表格中的空白行和空白列也是数据预处理中的一项基础任务。本文将介绍如何利用Python来自动化识别并删除Excel文件中的空白行和列,从而确保数据集的整洁性,为后续的数据分析工作奠定坚实的基础。用Python识别并删除Excel文件中的空白行和空白列库中的 CellRange.IsBlank 属性可以判断指定单元格范围是否为空白并返回一个布尔值。我们可以循环工作表中的各个已使用的行或列,并使用此属性判断是否为空白,并在为空白时使用 Worksheet.DeleteRow() 或 Worksheet.DeleteColumn() 方法将其删除。这样就实现了识别并删除Excel文件中的空白行和空白列的操作。以下时操作步骤:导入所需模块。创建 Workbook 实例,并使用 Workbook.LoadFromFile() 方法载入Excel文件。循环工作簿中的工作表,使用 Workbook.Worksheets.get_Item() 方法获取工作表。循环工作表中已使用的行,使用 Worksheet.Rows[].IsBlank 判断行是否为空白,并在是空白时使用 Worksheet.DeleteRow() 方法将其删除。循环工作表中已使用的列,使用 Worksheet.Columns[].IsBlank 判断列是否为空白,并在是空白时使用 Worksheet.DeleteColumn() 方法将其删除。使用 Workbook.SaveToFile() 方法保存Excel文件。释放资源。代码示例: from spire.xls import * from spire.xls.common import * # 创建Workbook实例 workbook = Workbook() # 加载Excel文件 workbook.LoadFromFile("示例.xlsx") # 遍历所有工作表 for i in range(workbook.Worksheets.Count): # 获取工作表 worksheet = workbook.Worksheets.get_Item(i) # 遍历所有已使用的行 for j in range(worksheet.Rows.Length-1, -1, -1): # 检查行是否为空 if worksheet.Rows[j].IsBlank: # 删除空行 worksheet.DeleteRow(j+1) # 遍历所有已使用的列 for k in range(worksheet.Columns.Length-1, -1, -1): # 检查列是否为空 if worksheet.Columns[k].IsBlank: # 删除空列 worksheet.DeleteColumn(k+1) # 保存文件 workbook.SaveToFile("output/DeleteBlankRowColumn.xlsx", FileFormat.Version2016) workbook.Dispose()
-
引言Word文档内容的整洁性与易读性是体现文档水平的关键因素之一。许多错误或不合理的内容,如多余的空白行,往往会影响阅读流畅度,或是干扰自动化数据处理的准确性。特别是在进行数据分析、报告生成及长文档编辑时,多余的空白行可能导致页数虚增、信息分隔混乱等问题。Python为批量删除Word文档空白行以及对这一过程的自动化处理提供了强有力的支持。本文将介绍如何利用Python自动化删除Word文档中的空白行。本文所使用的方法基于Spire.Doc for Python,PyPI:pip install Spire.Doc。用Python删除Word文档中的空白行在Word文档中,空白行主要是以空白段落的形式存在的,而段落在文档结构中是节下面的元素。因此,我们只需要循环文档各节以及节中的元素,判断其中是段落的元素,再判断其中文本内容为空的段落并将其删除,即可实现对文档中空白段落的批量移除。以下是操作步骤:导入所需模块。创建 Document 对象,并使用 Document.LoadFromFile() 方法加载 Word 文档。遍历每个章节和章节的每个子对象。首先,检查子对象是否属于段落类型。如果是,则继续检查子对象是否是 “段落 ”实例。如果是,则进一步检查段落文本是否为空白。如果是空白,则使用 Section.Body.ChildObjects.Remove() 方法删除段落。使用 Document.SaveToFile() 方法保存文档。释放资源。代码示例: from spire.doc import * from spire.doc.common import * # 创建Document类的对象 doc = Document() # 加载Word文档 doc.LoadFromFile("示例.docx") # 遍历文档中的每个节 for i in range(doc.Sections.Count): section = doc.Sections.get_Item(i) j = 0 # 遍历节中的每个子对象 while j < section.Body.ChildObjects.Count: # 检查子对象是否为段落类型 if section.Body.ChildObjects[j].DocumentObjectType == DocumentObjectType.Paragraph: objItem = section.Body.ChildObjects[j] # 检查子对象是否为Paragraph类的实例 if isinstance(objItem, Paragraph): paraObj = Paragraph(objItem) # 检查段落是否为空白 if paraObj.Text.strip() == "": # 如果段落文本为空白,从节的子对象列表中删除该对象 section.Body.ChildObjects.Remove(objItem) j -= 1 j += 1 # 保存文档 doc.SaveToFile("output/删除Word文档空白行.docx") doc.Close()
-
如何用python搭建简易的http/https服务器? 首先安装个ubuntu 22.04.3, 这个时候就已经能用python起http服务器了, sudo python3 -m http.server, 发现默认起的http服务器的端口是8000, 浏览器访问确认, 想用标准的80端口需要加参数,sudo python3 -m http.server 80, 浏览器访问确认, 起https服务器需要额外安全软件, 更新软件源,sudo apt update, 安装pip,sudo apt install python3-pip, 安装https模块,sudo pip3 install https.server, 这个时候就能用python起https服务器了, sudo python3 -m https.server, 发现默认起的https服务器的端口是8443, 浏览器访问确认, 想用标准的443端口需要加参数,sudo python3 -m https.server 443, 浏览器访问确认, 用python搭建的http/https服务器虽然简单,但是很实用,比安装现成的http/https软件要方便的多,尤其是https服务,就算是现成的软件,都需要很多麻烦的配置。 ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/cxyxx12/article/details/134528912
-
在Python编程中,闭包(Closure)是一个非常重要的概念,它使得函数可以作为一等公民(First-Class Citizen)在程序中灵活使用。闭包不仅增加了代码的复用性,还提供了强大的封装能力。本文将深入探讨Python闭包的理论基础,并给出一些实际的使用示例。闭包的理论基础什么是闭包?闭包(Closure)是指一个内嵌函数(Inner Function),它引用了其外部函数(Outer Function)的变量,并且这个内嵌函数在外部函数执行完毕后仍然可以被访问。简而言之,闭包就是一个可以记住并访问其外部函数作用域(lexical environment)中变量的函数。闭包的形成条件一个闭包的形成需要满足两个条件:必须有一个嵌套函数(即内部函数)。嵌套函数必须引用外部函数中的变量,并且外部函数的返回值必须是嵌套函数本身。闭包的作用闭包的主要作用包括:数据封装和私有化:通过闭包,我们可以将数据隐藏在内部函数中,只通过特定的接口进行访问和修改。实现回调函数和高阶函数:闭包可以作为回调函数传递给其他函数,也可以作为参数接收其他函数,从而实现高阶函数功能。延迟执行和缓存:闭包可以记住自己的状态,从而实现延迟执行和缓存功能。Python闭包的使用示例示例一:简单的闭包实现下面是一个简单的Python闭包示例:def outer_function(x): def inner_function(y): return x + y return inner_function # 创建一个闭包实例 closure_instance = outer_function(10) # 调用闭包实例 print(closure_instance(5)) # 输出:15在这个示例中,outer_function是一个外部函数,它接受一个参数x,并定义了一个内部函数inner_function。inner_function接受一个参数y,并返回x + y的结果。注意,inner_function引用了外部函数outer_function的变量x。最后,outer_function返回了inner_function本身,从而形成了一个闭包。示例二:使用闭包实现装饰器装饰器(Decorator)是Python中另一个重要的高级特性,它本质上是一个接受函数作为参数并返回一个新函数的函数。装饰器经常用于在不修改函数源代码的情况下,为函数添加额外的功能。下面是一个使用闭包实现装饰器的示例:def decorator_function(func): def wrapper_function(*args, **kwargs): print("Before function call") result = func(*args, **kwargs) print("After function call") return result return wrapper_function @decorator_function def target_function(): print("Inside target function") # 调用目标函数 target_function() # 输出: # Before function call # Inside target function # After function call在这个示例中,decorator_function是一个装饰器函数,它接受一个函数func作为参数,并定义了一个内部函数wrapper_function。wrapper_function在调用原始函数func之前和之后分别打印了一些信息,并返回了func的返回值。最后,decorator_function返回了wrapper_function本身,从而形成了一个闭包。通过@decorator_function语法糖,我们将decorator_function应用到了target_function上,使得在调用target_function时,实际上会调用wrapper_function。以上就是关于Python闭包的理论基础和使用示例的介绍。闭包是Python中一个非常强大的特性,掌握它可以帮助我们编写更加灵活、可维护和可复用的代码。
-
Python高阶知识点包括但不限于以下几个方面:装饰器(Decorators):装饰器是一个接受函数作为参数的可调用对象(通常是一个函数),并返回一个修改后的函数。装饰器可以用来修改或增强函数的行为,而无需修改函数的源代码。生成器和迭代器:生成器是一个可以迭代的对象,但它不是一次性生成所有的元素,而是每次只生成一个元素,这样可以节省内存空间。迭代器则是一种支持next()操作的对象,它可以从头到尾访问数据集合的元素。闭包:闭包是一个返回函数的函数,且返回的函数引用了外部函数的局部变量。这些变量在外部函数执行完毕后不会被销毁,因为它们被内部函数所引用。匿名函数lambda:lambda函数是一种快速定义单行函数的方式,可以用于需要简短函数的地方,比如排序的关键字参数等。列表推导式和字典推导式:这是一种简洁的构造列表和字典的方法,可以用一行代码实现原本需要多行代码才能完成的任务。多线程和多进程:Python提供了多线程和多进程的支持,以实现并发执行。这对于处理大量IO密集型任务或提高程序的执行效率非常有用。魔法方法(Magic Methods):例如init、str、call等,这些方法可以让你的对象表现得像内置类型一样。异步IO和协程:Python 3.5以上版本引入了async和await关键字,支持原生协程,使得异步编程更加方便。类型注解:Python 3.5引入了类型注解的功能,这对于提高代码的可读性和可维护性非常有帮助,同时也能利用一些工具进行类型检查,提前发现可能的类型错误。此外,还有一些其他的高阶知识点,如元类、上下文管理器、描述符等。掌握这些高阶知识点可以让你更深入地理解Python,并编写出更高效、更优雅的代码。请注意,虽然这些是高阶知识点,但并不意味着你必须全部掌握。根据你的需求和兴趣,可以选择性地深入学习其中的一部分或几部分。
-
理论介绍在Python中,多线程同时修改一个数时,确实需要考虑线程安全的问题。由于Python的全局解释器锁(GIL),CPU密集型任务在多线程下可能并不会得到性能提升,但对于I/O密集型任务或者某些计算可以并行化的情况,多线程仍然是有用的。对于共享资源的访问,特别是在多线程环境中,你需要使用某种形式的锁来确保同一时间只有一个线程可以修改该资源。在Python中,你可以使用threading模块提供的锁来实现这一点。代码实战以下是一个简单的例子,演示了如何在多线程环境中使用锁来安全地修改一个数:import threading # 初始化锁 lock = threading.Lock() # 共享的资源 shared_number = 0 def increment_number(n): global shared_number for _ in range(n): # 获取锁 lock.acquire() try: # 修改共享资源 shared_number += 1 print(f"Thread {threading.current_thread().name} incremented the number to {shared_number}") finally: # 释放锁 lock.release() # 创建多个线程,每个线程尝试增加共享数字 threads = [] for i in range(5): t = threading.Thread(target=increment_number, args=(1000,)) threads.append(t) t.start() # 等待所有线程完成 for t in threads: t.join() print(f"Final number: {shared_number}")在这个例子中,我们创建了一个全局的锁对象lock和一个全局的共享数字shared_number。然后,我们定义了一个函数increment_number,该函数在每次增加shared_number之前都会获取锁,并在完成后释放锁。这样,我们就可以确保在任何时候只有一个线程在修改shared_number。注意使用锁时要特别小心死锁的情况。死锁是当两个或更多的线程无限期地等待一个资源(如锁)时发生的,因为每个线程都在等待其他线程释放该资源。为了避免死锁,你应该始终确保在获取锁后能够释放它,即使发生了异常。在上面的例子中,我们使用了一个try/finally块来确保即使在increment_number函数中发生了异常,锁也会被释放。
-
在Python编程中,变量作用域是一个重要的概念。根据变量的定义位置,它可以是局部的(local)或全局的(global)。默认情况下,在函数或方法内部定义的变量是局部变量,它们只在函数或方法内部可见。而全局变量则在整个程序中都是可见的。但有时,我们可能需要在函数或方法内部修改全局变量的值。这时,Python提供了global关键字,允许我们在函数内部声明一个变量为全局变量,从而可以在函数内部修改它的值。global关键字的用法声明全局变量在函数内部,如果你想引用一个全局变量(而不是创建一个新的局部变量),你需要使用global关键字来声明它。# 定义一个全局变量 x = 10 def change_x(): # 使用global关键字声明x为全局变量 global x x = 20 print("在函数内部,x的值为:", x) change_x() print("在函数外部,x的值为:", x)输出:在函数内部,x的值为: 20 在函数外部,x的值为: 20如你所见,通过在函数内部使用global关键字,我们成功地修改了全局变量x的值。 2. 避免不必要的全局变量虽然global关键字在某些情况下很有用,但过度使用它可能会导致代码难以理解和维护。在可能的情况下,最好避免在函数内部修改全局变量,而是使用函数参数和返回值来传递数据。 3. 不要混淆局部变量和全局变量如果在函数内部没有使用global关键字来声明一个变量,但是该变量名与全局变量相同,那么Python会创建一个新的局部变量,而不是引用全局变量。# 定义一个全局变量 x = 10 def print_x(): # 创建一个新的局部变量x,而不是引用全局变量x x = 20 print("在函数内部,x的值为:", x) print_x() print("在函数外部,x的值为:", x)输出:在函数内部,x的值为: 20 在函数外部,x的值为: 10在这个例子中,函数print_x内部创建了一个新的局部变量x,而不是修改全局变量x的值。因此,全局变量x的值在函数调用前后没有改变。总结global关键字在Python中用于在函数内部声明一个变量为全局变量,从而允许我们在函数内部修改它的值。然而,过度依赖全局变量可能会导致代码难以理解和维护,因此在可能的情况下,最好使用函数参数和返回值来传递数据。同时,要注意不要混淆局部变量和全局变量,以避免意外的错误。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签