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 '=.*')
}
在这种情况下,irm
是 Invoke-RestMethod
, which is a simpler alternative to Invoke-WebRequest
(iwr
) 的内置别名,因为它直接 returns 感兴趣的文本, 作为多行字符串。
- 顺便说一句:代码中的
| Select-Object
实际上是空操作,可以省略。
.Trim()
修剪尾随换行符(所有尾随空格)。
-split '\r?\n'
将字符串拆分成单独的行。
-notmatch '^\s*#
过滤掉所有以 #
开头的行,前面可以有空格。
-replace '=.*
从每个包行中删除以 =
开头的所有内容。
挣扎了几个小时。我想打这个 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 '=.*')
}
-
在这种情况下,
irm
是Invoke-RestMethod
, which is a simpler alternative toInvoke-WebRequest
(iwr
) 的内置别名,因为它直接 returns 感兴趣的文本, 作为多行字符串。- 顺便说一句:代码中的
| Select-Object
实际上是空操作,可以省略。
- 顺便说一句:代码中的
.Trim()
修剪尾随换行符(所有尾随空格)。-split '\r?\n'
将字符串拆分成单独的行。-notmatch '^\s*#
过滤掉所有以#
开头的行,前面可以有空格。-replace '=.*
从每个包行中删除以=
开头的所有内容。