在python中获取符合特定模式的文件
在shell中,访问文件目录(文件夹)以及文件是很简单的,所以我们可以使用正则表达式,再加上for循环轻松的对某个文件夹下的通配格式文件进行处理,比如说是当前文件夹下的fq格式文件进行trim_galore或者是fastp,
比如说是格式如下:
for each_fq in *.fq;doyour_command_in_linuxdone
那么在python中,如果我们也想要做同样的事情以及任务,我们应该怎么做?
举个非常简单的例子,比如说我想要获取Q1文件夹下的所有txt文件,进行统一的处理,我该如何将文件路径收集到1个比如说是list列表中?
1,法1:使用glob模块
import glob
Q1_dir = "/data1/project/omics_final/Q1"
txt_files = glob.glob(f"{Q1_dir}/*.txt")
print(txt_files)
效果如下:
然后再接着我们就可以使用简单的for循环,在对应的list迭代器中进行循环处理每一个变量文件了;
for txt_file in txt_files:print(f"处理文件: {txt_file}")try:your_python_code_hereexcept Exception as e:error 处理
2,法2:使用pathlib模块
from pathlib import PathQ1_dir = Path("/data1/project/omics_final/Q1")txt_files = list(Q1_dir.glob("*.txt"))print(txt_files) for each_file in txt_files:print(f"处理文件: {each_file}")print(f"文件名: {str(each_file)}")print( each_file == str(each_file))
主要是细节上注意一下path对象和str转换:
3,法3:使用os模块
主要是使用endwith的字符串处理函数,另外listdir其实无法返回绝对路径,得配合f string,或者join函数
import osQ1_dir = "/data1/project/omics_final/Q1"all_files = os.listdir(Q1_dir)txt_files = [f for f in all_files if f.endswith('.txt')]print(txt_files)for txt_file in txt_files:print(f"{Q1_dir}/{txt_file} == {os.path.join(Q1_dir, txt_file)}")