将shell的 lines=$(grep "amd" ${host_file}) queue_names=($(grep "amd" ${host_file} | grep -v be | cut -d ' ' -f 1)) lsf_queue_name=($(grep "amd" ${host_file} | grep -v be | cut -d ' ' -f 1 | sed 's/amd/m/g')) queue_number=${#queue_names[@]} lsf_host_name=(0 0 0) lsf_host_slot=(0 0 0) 改写成python
时间: 2024-02-12 22:09:36 浏览: 130
你可以将以上 shell 脚本转化为 Python 代码如下:
```
with open(host_file, 'r') as f:
lines = f.readlines()
queue_names = []
lsf_queue_name = []
lsf_host_name = [0, 0, 0]
lsf_host_slot = [0, 0, 0]
for line in lines:
if "amd" in line:
if "be" not in line:
queue_names.append(line.split()[0])
lsf_queue_name = ['m' + q[3:] for q in queue_names]
queue_number = len(queue_names)
```
在 Python 中,你可以使用 `with open()` 语句打开文件,并使用 `readlines()` 方法读取文件中的所有行,然后使用 `for` 循环遍历每一行,执行相应的操作。注意,在 Python 中,数组索引从 0 开始,因此 `lsf_host_name` 和 `lsf_host_slot` 的初始值应为 `[0, 0, 0]` 而不是 `(0, 0, 0)`。
相关问题
将shell的 queue=${queue_names[i]} echo $queue temp=$(grep $queue ${host_file} | grep -Eo "peko1-a[0-9a-zA-Z]+-cch[0-9]+") temp1=($temp) tmp_line="" for tmp in "${temp1[@]}";do tmp_line+=$tmp" " done lsf_host_name[i]=$tmp_line echo host ${lsf_host_name[i]} lsf_host_slot[i]=0改写成python
你可以将以上 shell 脚本转化为 Python 代码如下:
```
with open(host_file, 'r') as f:
lines = f.readlines()
queue_names = []
lsf_queue_name = []
lsf_host_name = [0, 0, 0]
lsf_host_slot = [0, 0, 0]
for line in lines:
if "amd" in line:
if "be" not in line:
queue_names.append(line.split()[0])
lsf_queue_name = ['m' + q[3:] for q in queue_names]
queue_number = len(queue_names)
for i in range(queue_number):
queue = queue_names[i]
print(queue)
temp = re.findall(r'peko1-a[0-9a-zA-Z]+-cch[0-9]+', open(host_file).read())
temp1 = temp.split()
tmp_line = ""
for tmp in temp1:
tmp_line += tmp + " "
lsf_host_name[i] = tmp_line
print(f"host {lsf_host_name[i]}")
lsf_host_slot[i] = 0
```
在 Python 中,你可以使用 `re` 模块的 `findall()` 方法来查找符合特定正则表达式的字符串。在这里,我们使用正则表达式 `r'peko1-a[0-9a-zA-Z]+-cch[0-9]+'` 来查找形如 `peko1-aXX-cchX` 的字符串。然后,使用 `split()` 方法将字符串拆分为列表,并使用 `for` 循环遍历每一个字符串,将它们拼接起来形成 `lsf_host_name[i]` 的字符串表示。注意,由于 `lsf_host_name` 和 `lsf_host_slot` 的初始值已在之前定义,因此不需要再次给它们赋值。
阅读全文