Powershell 解析 Requirements.txt 文件的响应字符串

Powershell Parse Response String of Requirements.txt file

挣扎了几个小时。我想打这个 link 包含这些内容:

# Generated on: Python 3.6.12
# With snowflake-connector-python version: 2.4.6
asn1crypto==1.4.0
azure-common==1.1.27
azure-core==1.15.0
azure-storage-blob==12.8.1
boto3==1.17.98
botocore==1.20.98
certifi==2021.5.30
cffi==1.14.5
chardet==4.0.0
cryptography==3.4.7
dataclasses==0.8
idna==2.10
isodate==0.6.0
jmespath==0.10.0
msrest==0.6.21
oauthlib==3.1.1
oscrypto==1.2.1
pycparser==2.20
pycryptodomex==3.10.1
PyJWT==2.1.0
pyOpenSSL==20.0.1
python-dateutil==2.8.1
pytz==2021.1
requests==2.25.1
requests-oauthlib==1.3.0
s3transfer==0.4.2
six==1.16.0
urllib3==1.26.5

并将每个未注释掉的行传递给 Poetry(用于 Python 依赖管理的命令行工具)

这是我的第一步

(iwr https://raw.githubusercontent.com/snowflakedb/snowflake-connector-python/v2.5.1/tested_requirements/requirements_36.reqs | Select-Object).Content > req.txt

我遇到困难的地方是我尝试使用各种定界符和 .Split() 进行 convertfrom-string,但我似乎无法解析出我需要的部分。尽管版本号是可选的,但诗歌只需要将“packagename==”作为输入。所以我基本上想忽略以“#”开头的行,然后通过管道传递每一行,甚至将其保存为数组。它似乎没有响应将分隔符设置为“\t”或回车 return“`r”。

接下来我会做类似的事情

foreach($package in $package_array){poetry add $package}

如有任何帮助,我们将不胜感激。

AdminOfThings 在评论中提供了一个很好的指示,但让我尝试将它们放在一起:

$url = 'https://raw.githubusercontent.com/snowflakedb/snowflake-connector-python/v2.5.1/tested_requirements/requirements_36.reqs'

foreach ($pkgLine in (irm $url).Trim() -split '\r?\n' -notmatch '^\s*#') {
  # Remove `Write-Host` to perform the actual poetry call.
  Write-Host poetry add ($pkgLine -replace '=.*')
}
    在这种情况下,
  • irmInvoke-RestMethod, which is a simpler alternative to Invoke-WebRequest (iwr) 的内置别名,因为它直接 returns 感兴趣的文本, 作为多行字符串。

    • 顺便说一句:代码中的 | Select-Object 实际上是空操作,可以省略。
  • .Trim() 修剪尾随换行符(所有尾随空格)。

  • -split '\r?\n' 将字符串拆分成单独的行。

  • -notmatch '^\s*# 过滤掉所有以 # 开头的行,前面可以有空格。

  • -replace '=.* 从每个包行中删除以 = 开头的所有内容。