Hackernoon logoWorking With Files In Python: Part 2 by@marvin

Working With Files In Python: Part 2

Marvin Hacker Noon profile picture


Software engineer. I write code and stay weird.

This is the second part of the series File management with python. We pick up from where we left last time Part 1, where we organized files according to the extension. So, let's get started.

Sometimes, organizing files might need just a bit more than knowing their extensions. For instance, take a directory where all the files are of the same type. Whether .pdf, .doc , .mp4 and so on. In this piece, we take our organization a little further. Say you have a folder with slides (.ppt ). In this case, you've just received a whole lot of lecture files, but they are not exactly easy to go through. So instead of having a whole slide having everything for the first lecture, they were broken down to a slide for a session. Our folder, in this case, is assumed to look as below.


... and so on

What's happening? We got the slides alright, but they are a mess. You would have to look through the folder for a specific slide that follows from where you've just read. We should make this easier, Let's have all the slides organized according to the session.

Remember how we generated random files in the previous article? We'll do the same thing, only this time, all the files will be of the same type. Have a look at that here for a quick refresher. Our file looks much like the


# create_lectures.py

import os
from pathlib import Path

sessions = [str(x) for x in range(1,21)]  # create 20sessions 
sessions = [str(0)+item if int(item) < 10 else item for item in sessions]

# Datastructuressession01Slide1.ppt

# get into the DataStructures directory

for item in sessions:
    # create 20 slides for each session
    for num in range(21):
        file_to_create = f"Datastructuressession{item}Slide{num}.ppt"

Okay, okay. I'll admit I went a little overboard with the number of files this time. That's quite the number.

Let's draw our attention to this line:

sessions = [str(0)+item if int(item) < 10 else item for item in sessions]

The line just before this makes a list of twenty numbers, but here's the catch, we convert each of these numbers to strings. Why?

We are appending the number 0(zero) as a string to each number if indeed it is below 10. That would make each number in the lower 10 range look like this; 01, 02, 03,... and so on.

Above, we created a number of files for each session in a range of 20 sessions.

What we do next is simple, group these files according to the session.

# clean_reading.py
# move files to directories according to the file name pattern

import os
import shutil

# get into the Datastructures directory

# Datastructuressession01Slide1.ppt
for f in os.listdir("."):
    folder_name = f[14:23]
    # print(folder_name)

    if not os.path.exists(folder_name):
        shutil.move(f, folder_name)
        shutil.move(f, folder_name)

The only line that might need some explaining would be:

folder_name = f[14:23]

We have counted the number of characters for the kind of name we want our folder to be named after. In this case, we broke down the string for the file name

from where we get that the first
for the session is character number
in the whole string while the last session count would be character number
which translating from our generated files would mean the last digit of the number

Running this would get all our slides in their respective sessions quickly, and clean.

There is a lot more that one would want to do, say let the program know which sessions are included without a manual key in of the character position, but more advanced tools exist for this especially under the UNIX environment.

Feel free to do some scouting and find what works best for you. As a heads up, here's a cool GUI sorter made with python. Paul did an awesome job on this. Questions? Do reach out in the comment section. As usual, all this code can be found at TheGreenCodes.

Previously published at https://thegreencodes.com/file-management-with-python-part-2-ck10hkxd6001n6ps1m27sswmy


Join Hacker Noon

Create your free account to unlock your custom reading experience.