多个10x单细胞转录组每个样品的3个文件如何归纳到同一个文件夹里面

多个10x单细胞转录组每个样品的3个文件如何归纳到同一个文件夹里面 (看到曾老师收费不能白嫖 我就写个脚本)

首先 我下载了一个10x的文件集合哈

多个10x单细胞转录组每个样品的3个文件如何归纳到同一个文件夹里面_第1张图片

我的理想是整成这个样

多个10x单细胞转录组每个样品的3个文件如何归纳到同一个文件夹里面_第2张图片

打开后是这个样式

多个10x单细胞转录组每个样品的3个文件如何归纳到同一个文件夹里面_第3张图片

如何实现呢我提供了py的脚本,让chatgpt注释下给大家看

# 导入必要的模块
import os
import re
import shutil

# 获取当前目录下所有以'.gz'结尾的文件列表
files = [f for f in os.listdir() if re.match('.*\.gz$', f)]

# 遍历每个文件
for i in files:
    # 从文件名中提取出GSM号
    GSM = re.findall('(?<=GSM)\\d+', i)[0]
    # 从文件名中提取出样本名
    sample = re.findall('(?<=GSM\\d{7}_)[^_]+', i)[0]
    # 生成新的文件夹名字
    filename = f'GSM{GSM}_{sample}'
    # 如果文件夹不存在,则创建文件夹
    if not os.path.exists(filename):
        os.mkdir(filename)
    # 根据GSM号生成文件名的正则表达式
    filepattern = f'GSM{GSM}.*\.gz$'
    # 获取所有以GSM号开头,以'.gz'结尾的文件列表
    files1 = [f1 for f1 in os.listdir() if re.match(filepattern, f1)]
    # 遍历每个文件,将文件移动到对应的文件夹中
    for file in files1:
        # 从文件名中提取出新的文件名
        new_filename = file.split('_')[2]
        # 将文件移动到对应的文件夹中
        shutil.move(file, os.path.join(filename, new_filename))

考虑到生物信息的同学们用R 我也写了个R 的版本

library(stringr)
files <- list.files(pattern = ".gz$")
for (i in files) {
  GSM <- str_extract(i, "(?<=GSM)\\d+")
  sample <- str_extract(i, "(?<=GSM\\d{7}_)[[:alnum:]]+")
  filename <- paste0('GSM',GSM,'_',sample)
  if (!dir.exists(filename)){
    dir.create(filename)
  }
  filepattern <- paste0('GSM',GSM,'.*\\.gz$')
  files1 <- list.files(pattern = filepattern)
  
  # 移动文件
  lapply(files1, function(file) {
    new_filename <- strsplit(file,'_',)[[1]][3]
    file.rename(file, 
                paste0(filename,'/',new_filename))
  })
}

你可能感兴趣的:(单细胞,其他)