Skip to content

Folders in Synapse

Similar to Projects, Folders are “containers” that offer an additional way to organize your data. Instead of uploading a bunch of single files into your project, you can create folders to separate your data in a systematic way.

Folders in Synapse always have a “parent”, which could be a project or a folder. You can organize collections of folders and sub-folders, just as you would on your local computer.

Read more about Folders

Note: You may optionally follow the Uploading data in bulk tutorial instead. The bulk tutorial may fit your needs better as it limits the amount of code that you are required to write and maintain.

This tutorial will follow a mix of Flattened Data Layout and Hierarchy Data Layout. It is recommended to use one or the other, but not both. Both are used in this tutorial to demonstrate the flexibility of storing folders within folders on Synapse. With this example layout:

.
├── experiment_notes
│   ├── notes_2022
│   │   ├── fileA.txt
│   │   └── fileB.txt
│   └── notes_2023
│       ├── fileC.txt
│       └── fileD.txt
├── biospecimen_experiment_1
│   ├── fileA.txt
│   └── fileB.txt
├── biospecimen_experiment_2
│   ├── fileC.txt
│   └── fileD.txt
├── single_cell_RNAseq_batch_1
│   ├── SRR12345678_R1.fastq.gz
│   └── SRR12345678_R2.fastq.gz
└── single_cell_RNAseq_batch_2
    ├── SRR12345678_R1.fastq.gz
    └── SRR12345678_R2.fastq.gz

Tutorial Purpose

In this tutorial you will:

  1. Create 4 new folders
  2. Print stored attributes about your folder
  3. Create 2 sub-folders

Prerequisites

  • Make sure that you have completed the Project tutorial.

1. Create a new folder

# Step 1: Create a new folder
import synapseclient
from synapseclient import Folder

syn = synapseclient.login()

# Retrieve the project ID
my_project_id = syn.findEntityId(
    name="My uniquely named project about Alzheimer's Disease"
)

# Create a Folder object and store it
my_scrnaseq_batch_1_folder = Folder(
    name="single_cell_RNAseq_batch_1", parent=my_project_id
)
my_scrnaseq_batch_1_folder = syn.store(obj=my_scrnaseq_batch_1_folder)

my_scrnaseq_batch_2_folder = Folder(
    name="single_cell_RNAseq_batch_2", parent=my_project_id
)
my_scrnaseq_batch_2_folder = syn.store(obj=my_scrnaseq_batch_2_folder)

biospecimen_experiment_1_folder = Folder(
    name="biospecimen_experiment_1", parent=my_project_id
)
biospecimen_experiment_1_folder = syn.store(obj=biospecimen_experiment_1_folder)

biospecimen_experiment_2_folder = Folder(
    name="biospecimen_experiment_2", parent=my_project_id
)
biospecimen_experiment_2_folder = syn.store(obj=biospecimen_experiment_2_folder)

2. Print stored attributes about your folder

biospecimen_experiment_2_folder = syn.store(obj=biospecimen_experiment_2_folder)

# Step 2: Print stored attributes about your folder
my_scrnaseq_batch_1_folder_id = my_scrnaseq_batch_1_folder.id
print(f"My folder ID is: {my_scrnaseq_batch_1_folder_id}")

print(f"The parent ID of my folder is: {my_scrnaseq_batch_1_folder.parentId}")

print(f"I created my folder on: {my_scrnaseq_batch_1_folder.createdOn}")

print(
    f"The ID of the user that created my folder is: {my_scrnaseq_batch_1_folder.createdBy}"
)

print(f"My folder was last modified on: {my_scrnaseq_batch_1_folder.modifiedOn}")
You'll notice the output looks like:
My folder ID is: syn53205629
The parent ID of my folder is: syn53185532
I created my folder on: 2023-12-28T20:52:50.193Z
The ID of the user that created my folder is: 3481671
My folder was last modified on: 2023-12-28T20:52:50.193Z

3. Create 2 sub-folders

hierarchical_root_folder = Folder(name="experiment_notes", parent=my_project_id)
hierarchical_root_folder = syn.store(obj=hierarchical_root_folder)

folder_notes_2023 = Folder(name="notes_2023", parent=hierarchical_root_folder.id)
folder_notes_2023 = syn.store(obj=folder_notes_2023)

folder_notes_2022 = Folder(name="notes_2022", parent=hierarchical_root_folder.id)
folder_notes_2022 = syn.store(obj=folder_notes_2022)

Results

Now that you have created your folders you'll be able to inspect this on the Files tab of your project in the synapse web UI. It should look similar to:

folder

Source code for this tutorial

Click to show me
"""
Here is where you'll find the code for the Folder tutorial.
"""

# Step 1: Create a new folder
import synapseclient
from synapseclient import Folder

syn = synapseclient.login()

# Retrieve the project ID
my_project_id = syn.findEntityId(
    name="My uniquely named project about Alzheimer's Disease"
)

# Create a Folder object and store it
my_scrnaseq_batch_1_folder = Folder(
    name="single_cell_RNAseq_batch_1", parent=my_project_id
)
my_scrnaseq_batch_1_folder = syn.store(obj=my_scrnaseq_batch_1_folder)

my_scrnaseq_batch_2_folder = Folder(
    name="single_cell_RNAseq_batch_2", parent=my_project_id
)
my_scrnaseq_batch_2_folder = syn.store(obj=my_scrnaseq_batch_2_folder)

biospecimen_experiment_1_folder = Folder(
    name="biospecimen_experiment_1", parent=my_project_id
)
biospecimen_experiment_1_folder = syn.store(obj=biospecimen_experiment_1_folder)

biospecimen_experiment_2_folder = Folder(
    name="biospecimen_experiment_2", parent=my_project_id
)
biospecimen_experiment_2_folder = syn.store(obj=biospecimen_experiment_2_folder)

# Step 2: Print stored attributes about your folder
my_scrnaseq_batch_1_folder_id = my_scrnaseq_batch_1_folder.id
print(f"My folder ID is: {my_scrnaseq_batch_1_folder_id}")

print(f"The parent ID of my folder is: {my_scrnaseq_batch_1_folder.parentId}")

print(f"I created my folder on: {my_scrnaseq_batch_1_folder.createdOn}")

print(
    f"The ID of the user that created my folder is: {my_scrnaseq_batch_1_folder.createdBy}"
)

print(f"My folder was last modified on: {my_scrnaseq_batch_1_folder.modifiedOn}")

# Step 3: Create 2 sub-folders
hierarchical_root_folder = Folder(name="experiment_notes", parent=my_project_id)
hierarchical_root_folder = syn.store(obj=hierarchical_root_folder)

folder_notes_2023 = Folder(name="notes_2023", parent=hierarchical_root_folder.id)
folder_notes_2023 = syn.store(obj=folder_notes_2023)

folder_notes_2022 = Folder(name="notes_2022", parent=hierarchical_root_folder.id)
folder_notes_2022 = syn.store(obj=folder_notes_2022)

References used in this tutorial