本文章以下载上传在GEO database上的ribo-seq数据为例,详细介绍如何使用prefetch和Python脚本快速批量下载数据。
一、使用 prefetch 批量下载
获取文件号
-
从文中获得上传的GEO号,点击链接跳转到GEO
2.下拉至ribo-seq部分,点击跳转
-
下拉至SRA,点击后面的号码跳转
-
依次点击:send to - File - RunInfo - Create File
5.下载得到SraRunInfo.csv,将Run列复制到SRR_Acc_List.txt
批量下载
下载工具为sra-tools中的prefetch。下载速度较慢,分割下载列表并行下载提高下载速度
## 1. conda安装
conda install -c bioconda sra-tools
## 2. 批量下载
# prefetch --option-file SRR_Acc_List.txt #(速度较慢)
# 分割加速下载
split -l 10 SRR_Acc_List.txt part_
# 并行运行多个 prefetch 命令
for part in part_*; do
/opt/mambaforge/23.3.1-1/pkgs/sra-tools-3.0.3-h87f3376_0/bin/prefetch --max-size 200G --option-file $part &
done
## 3. 移动文件夹中的文件到当前路径
find . -mindepth 2 -type f -exec mv -t . {} +
## 4. 批量拆分sra文件为fastq.gz
cat SRR_Acc_List.txt|while read srr; do (fastq-dump --gzip --split-files -A $srr ${srr}.sra); done
二、使用Python脚本下载
当学会了使用python代码后,很多操作会变得高效且快捷!
下载Kaya-Okur et al. (2020)文章里的cut&tag数据:
- 先从EBI上获得下载地址,保存在list.txt
ftp.sra.ebi.ac.uk/vol1/fastq/SRR122/017/SRR12246717/SRR12246717_1.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR122/017/SRR12246717/SRR12246717_2.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR110/040/SRR11074240/SRR11074240_1.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR110/040/SRR11074240/SRR11074240_2.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR110/054/SRR11074254/SRR11074254_1.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR110/054/SRR11074254/SRR11074254_2.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR110/058/SRR11074258/SRR11074258_1.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR110/058/SRR11074258/SRR11074258_2.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR119/024/SRR11923224/SRR11923224_1.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR119/024/SRR11923224/SRR11923224_2.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR875/001/SRR8754611/SRR8754611_1.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR875/001/SRR8754611/SRR8754611_2.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR875/002/SRR8754612/SRR8754612_1.fastq.gz ftp.sra.ebi.ac.uk/vol1/fastq/SRR875/002/SRR8754612/SRR8754612_2.fastq.gz
2.创建一个Python 文件(download_files.py),包含下面内容:
import os
import requests
def download_file(url, dest_folder):
if not os.path.exists(dest_folder):
os.makedirs(dest_folder)
response = requests.get(url, stream=True)
file_name = os.path.join(dest_folder, url.split('/')[-1])
with open(file_name, 'wb') as file:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)
print(f"{file_name} downloaded.")
def convert_ftp_to_http(ftp_url):
return ftp_url.replace("ftp://", "http://")
def main(file_path, dest_folder):
with open(file_path, 'r') as file:
urls = file.read().split()
http_urls = [convert_ftp_to_http(url) for url in urls]
for url in http_urls:
download_file(url, dest_folder)
if __name__ == "__main__":
list_file = 'list.txt'
output_folder = './data'
main(list_file, output_folder)
- 使用 python 下载
注意list.txt和download_files.py都要放在/home/XXX/yourpath/路径下,便于运行
cd /home/XXX/yourpath/
download_files.py
欢迎大家评论交流!
(每帖分享:最困难的事:正确认识自己;最容易的事情:给别人提建议)