Moving a File
00:00
Here we are with the next task. Move the file image1.png
to a new directory called images/
inside of the my_folder/
directory.
00:10
I will need to create a new directory and call it images/
and then move the file image1.png
. If I’d be writing this inside of a script, I would be doing similar things to here that I’m just making like little short code comments that help me keep track of what I’m supposed to do here.
00:27
Now this task actually has kind of like two steps. So let’s break it up and say make first a new directory called images/
… inside there, yeah, okay, so I can can say like that.
00:42
a
is create a new directory called images/
. Then the next task is going to be to move the file to this new directory.
00:57
Move the file to this new directory. Okay, these are my two tasks, and let’s start with a) Create a new directory called `images` inside of the `my_folder` directory. Similar to what you did before, I’m going say images_dir
is going to be my_folder
.
01:19
my_
… I often try to press the Tab character to auto-complete a variable that I’m writing. Most modern code editors have this, or you can install some sort of extension to do it for you.
01:31
And that’s just very helpful because it avoids making a typo, or maybe you don’t exactly know what the variable’s called, and then you can just cycle through it by pressing the Tab character. Here in the IDLE REPL, you see, like, sometimes it brings up this little box if I didn’t give it enough. Let me see. m
, yeah, here you go.
01:50
Because there’s multiple possible matches if I just say m
, you can cycle through them like this, and then in case I find my_folder
is what I’m looking for, I can press Enter.
02:00
But if you write more characters, then it’ll auto-complete right away. Little detour. Okay, let’s keep going. my_folder
and then I want the new directory that should be called "images"
.
02:16
And then I’m going to say images_dir.mkdir()
. Then we’re at b) Move the file `image1.png` to this new directory. I will need the path of image1
.
02:33
image1
was in my_folder
. And then "image1.png"
.
02:43
So double-check whether this looks correct. Users/martin/my_folder/image1.png
. Cool. Let’s just check whether it exists, that I didn’t mistype anything, because remember you can create paths even if the file doesn’t exist.
02:57
But looks good, the file is there. And now I want to move it. So I’m going to first have to define the destination where I want to move it to. So I’ll say destination
is my_folder
.
03:12
Oh wait, actually I already have images_dir
, so images_dir
. There it is. And then I’ll just call it the same, "image1.png"
.
03:21
So that’s my destination where I want to move it to. Let’s check that one out too. All right. /images/
image1.png
. Looks like this is the path where I need to move it.
03:34
Let’s also check here, does this one exist? destination.exists()
. It doesn’t exist yet. Sweet, so I’m going to say image1.replace()
and then put it over there in the destination path.
03:54
Now here you can see that pathlib
actually returns something, so there’s a bit of feedback if you want. It gives you back the Path
object that points to the new destination of the file, so where you just moved it … which means that if I’m now going to say destination.exists()
,
04:13
we’ll get a True
. Okay, but again, I still don’t entirely trust my command line, you know, so I want to go over to the graphical user interface and check whether it’s actually there and moved. Okay, you can see there’s already a space, a gaping hole where image1.png
used to be, but we have an images/
folder, and inside of images/
there’s image1.png
. So the move worked out perfectly.
Martin Breuss RP Team on Oct. 21, 2024
@Jakub good point! If you really want to just move a file without e.g. renaming it, then it’ll be safer to do what you suggest:
>>> image1.name
'image1.png'
>>> destination = images_dir / image1.name
Avoids any typos getting in the way :)
Become a Member to join the conversation.
Jakub on Oct. 17, 2024
Would be better to use image1.name instead of writing “image1.png”. It avoids hardcoding I think :)