在 python 中重写一个 shell/awk?

Rewriting an shell/awk in python?

我在 awk 中基本上有两行代码,我试图在 python 中重写它们,它们如下:

1. filename=$(echo "$file" | awk -F'[/]' '{ print  }')
2. experiment=$(echo "$filename" | awk -F'[.]' '{ print  }')

其中 file 是 *.fastq.gz 文件。例如NoBuffer-18_S50.fastq.gz

如果我没理解错的话,第一行是根据“/”解析读取每一行,然后打印每一行的第二个字段。第二行做了类似的事情,取文件名,用“.”分隔。然后打印每行的第一个字段。

我想知道我是否可以在 python 中使用正则表达式或 .split() 之类的东西来重写这些。或者,如果这甚至是可取的?任何帮助将不胜感激!

您似乎在尝试获取不带扩展名的文件名。一种可能的方法是使用您提到的拆分方法。

path= "/path/lvl/sublvl/NoBuffer-18_S50.fastq.gz"
filename = path.split('/')[-1]
experiment = filename.split('.')[0]
print(filename)
print(experiment)

PS.: 我用斜线分割中的[-1]得到最后一段路径,不管有多少层。

您可以为此使用 pathlib(自 Python 3.4 起可用)。

from pathlib import Path

pth = "/path/to/NoBuffer-18_S50.fastz.gz"
filename = Path(pth).name
experiment = Path(pth).stem

当然,您也可以将Path(pth)赋值给一个变量。这使用 name and stem 属性来查找文件名的适当部分。