首页 > 编程问答 >Python - for循环不使用正则表达式附加数组

Python - for循环不使用正则表达式附加数组

时间:2024-07-22 08:50:16浏览次数:14  
标签:python arrays regex response

以下代码从 URL 获取版本号,然后对于每个版本号,转到该版本号的页面并使用文件名的特定模式填充数组。生成的数组应包含每个版本号的文件名列表,但它似乎只包含早期版本 (2.6)。使用 print 语句,我可以看到代码的工作原理是它获取 sha256sums.asc 文件 - 所有这些文件,所有版本。我猜我还不了解有关填充 Python 数组的一些知识,并且我的代码不允许 patch_full_versions 数组按预期包含从版本 2.6 到 6.9 的所有内容。

如果数组以某种方式被重置,我希望它只包含最新版本号,但事实恰恰相反 - 它只包含最早的版本号。就好像它只是停在那里,即使代码继续为更高版本获取信息。

`

patches_versions = []
patches_full_versions = []

RT_PATCHES_BASE_URL = "https://cdn.kernel.org/pub/linux/kernel/projects/rt/"

cleaner = re.compile("<.*?>") # For removing HTML tags later.

# Create array of patches versions:
patches_page_content = requests.get(RT_PATCHES_BASE_URL)
patches_page_content.raise_for_status()
stripped_content = re.sub(cleaner, "", patches_page_content.text)
for line in stripped_content.splitlines():
    x = False
    x = re.findall(r"[0-9]", line)
    if not line == "":
        if x:
            patches_versions.append(line.split("/")[0])

patch_name_pattern = re.compile(r'patch-.*?\.tar\.xz')
for x in patches_versions:
    patch_version_page_content = requests.get(f"{RT_PATCHES_BASE_URL}{x}/sha256sums.asc")
    patch_version_page_content.raise_for_status()
    for match in re.findall(patch_name_pattern, patch_version_page_content.text):
        patches_full_versions.append(match)

`


的代码存在一些问题,导致它无法按预期工作。主要问题是没有清除 patches_full_versions 列表。这意味着,对于每个循环迭代,都在 添加 到现有的列表中,而不是创建一个新的列表。

以下是对的代码的一些改进和解释:

import requests
import re

patches_versions = []
patches_full_versions = []

RT_PATCHES_BASE_URL = "https://cdn.kernel.org/pub/linux/kernel/projects/rt/"

cleaner = re.compile(r"&lt;.*?&gt;") 
patch_name_pattern = re.compile(r'patch-.*?\.tar\.xz')

# 获取版本号列表
patches_page_content = requests.get(RT_PATCHES_BASE_URL)
patches_page_content.raise_for_status()
stripped_content = re.sub(cleaner, "", patches_page_content.text)

for line in stripped_content.splitlines():
  # 使用startswith方法简化版本号提取
  if line.startswith("5."): 
    patches_versions.append(line.split("/")[0])

# 对于每个版本,获取补丁文件名列表
for version in patches_versions:
  patches_full_versions = []  # 为每个版本创建一个新的列表
  patch_version_page_content = requests.get(f"{RT_PATCHES_BASE_URL}{version}/sha256sums.asc")
  patch_version_page_content.raise_for_status()
  for line in patch_version_page_content.text.splitlines():
    match = patch_name_pattern.search(line)
    if match:
        patches_full_versions.append(match.group(0)) 
  print(f"Version: {version}, Patches: {patches_full_versions}") # 打印每个版本的补丁列表

代码解释:

  1. patches_full_versions = [] 在循环内: 在每个版本的循环迭代开始时,我们创建了一个新的 patches_full_versions 列表。这可以确保我们不会将新版本的数据添加到先前版本的数据中。
  2. 使用 startswith 方法: 使用 startswith 方法来检查以"5."开头的行,这是一种更简洁、更可读的方式来识别版本号行。
  3. 直接使用 re.search 获取匹配项: 使用 re.search 方法在每行中查找匹配的补丁文件名,如果找到匹配项,则使用 match.group(0) 获取完整的匹配字符串。
  4. 打印每个版本的补丁列表: 在每个版本的循环迭代结束时,我们打印了该版本的补丁文件名列表。

通过这些更改,代码现在应该可以按预期工作,为提供每个可用版本的补丁文件名列表。

标签:python,arrays,regex,response
From: 78776639

相关文章

  • 使用 callable_iterator (re.finditer) 导致 Python 冻结
    我有一个为文本的每一行调用的函数。deftokenize_line(line:str,cmd=''):matches=re.finditer(Patterns.SUPPORTED_TOKENS,line)tokens_found,not_found,start_idx=[],[],0print(matches)formatchinmatches:pass#Rest......
  • Python 的 time.sleep - 永远不会醒来
    我认为这将是那些简单的问题之一,但它让我感到困惑。[停止媒体:我是对的。找到了解决方案。查看答案。]我正在使用Python的单元测试框架来测试多线程应用程序。很好而且很直接-我有5个左右的工作线程监视一个公共队列,以及一个为它们制作工作项的生产者线程......
  • python中使用mitmproxy的http模块出错
    我有一个使用mitmproxyhttp函数的代码,它在这里惨败:defmain(stdscr):try:parser=argparse.ArgumentParser(description='NetSourNetworkAnalyzer')parser.add_argument('--proxy',action='store_true',help='EnableH......
  • 使用python图像去噪没有获得所需的重建图像
    我是python机器学习的初学者,我正在编写一个程序,使图像变得嘈杂,然后我的程序输出重建的图像。我正在使用加性高斯白噪声并使用前馈神经网络。我的程序显示真实图像、噪声图像和重建图像。这些是我通常得到的结果。有人知道如何解决这样的问题吗?这是我的代码:ap......
  • 使用 pip 22.3.1 和 python 3.11.0 安装 MetaTrader5 错误
    我正在尝试使用pip在Windows上安装MetaTrader5。python--versionPython3.11.0pip--versionpip22.3.1pipinstallMetaTrader5ERROR:CouldnotfindaversionthatsatisfiestherequirementMetaTrader5(fromversions:none)ERROR:Nomatchingdistribu......
  • 在 Python 中溶解线条
    我有一个包含多行的形状文件。我正在寻找一种方法来消除所有的接触线。这在ArcMap中是可能的,但似乎在Python和QGIS中都无法做到:之前:所需的输出:这需要在多行上完成,因此像QGIS合并一样手动执行不是一个选项。在ArcMap中,我曾经使用“溶解”......
  • 一个简单的问题(python、串行通信和arduinos)
    只是一个关于小脚本的快速问题,由于某种原因无法工作我运行了这个脚本:importserialimporttimeimportturtledefserialreading():serialPort=serial.Serial(port="COM5",baudrate=9600,bytesize=8,timeout=2,stopbits=serial.STOPBITS_ONE......
  • 我在 Windows 10 上运行 Python 代码后控制台立​​即关闭
    虽然我在代码末尾使用input(),但在Windows10(IDLE之外)的窗口中输入名称后,控制台仍然立即关闭,并且我看不到结果。我该怎么做才能阻止控制台关闭?#!python3name=input('Enteryourname:')print('Hello'+name)input('pressEntertoexit:')你在代码末尾......
  • 具有未定义嵌套列表深度的嵌套列表的Python注释类型
    [[1,2,3],3,[2,4],5]的类型是list[list[int]|int]但是,如果嵌套列表具有未定义的深度,例如[[[1,2]],2,[1,[3,[3]]]],3,[2,[2]]],那么它会具有什么类型?可以使用递归类型提示来表示任意深度嵌套的列表:fromtypingimportList,Union......
  • 在Spyder(Python 3.6)中导入cv2时出现导入错误
    我已经在Windows操作系统中安装了opencv3.0.0。我已运行该应用程序并已成功将其安装在C:\驱动器中,并且还将cv2.pyd文件复制到C:\Python27\Lib\site-packages中,正如我在几个教程视频中看到的那样在我的Python2.7.5Shell中,即当我键入>>>i......