Python Forum
Trying to pathlib instead of os.path
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Trying to pathlib instead of os.path
#1
Greetings!
I'm having a hard time justifying why I would use pathlib libraries instead of os.path. Undecided
It is not intuitive and I have a hell of a time trying to use it.
Here is an example, I have a directory with 3 Subdirs and 6 files.
I'm trying to test if an item is a file or directory.
mydir = 'c:\\02'
for esb in os.listdir(mydir) :
    print (esb)
    dr = pathlib.Path(esb)
    print (dr)
regardless if I use 'pathlib.Path" or 'pathlib.PurePath'
both prints are the same.
When I add 'If' to test for Dir/File :
mydir = 'c:\\02'
for esb in os.listdir(mydir) :
    #print (esb)
    dr = pathlib.Path(esb)
    #print (dr)
    item = dr.is_file()
    if item :
        print(f" File") 
    else :
        print(f" Directory")
It prints all 9 items are directories. Confused
Thank you.
Reply
#2
You are assuming that if it's not a file that it must be a directory. But that's not the case. It might not exist at all. You've only given the filename to Path, not the entire path. So it's not looking in mydir for the files, it's looking in your current directory. When it's not found, is_file() returns False.

Change line 4 to something like dr = pathlib.Path(mydir, esb)

An alternative that is similar:

import pathlib
import os

mydir = 'C:\\02'
for file_object in pathlib.Path(mydir).iterdir():
    if file_object.is_dir():
        print(f"{file_object} is a Directory")
    elif file_object.is_file():
        print(f"{file_object} is a File")
    else:
        print(f"{file_object} is neither file nor directory.")
tester_V likes this post
Reply
#3
bowlofred! You are da man!

I came up with this snipped (see below) it is working but somehow it does not look nice.
hdir = 'c:\\02'
for esb in os.listdir(hdir) :
    ti = os.path.join(hdir,esb)
    tt=pathlib.Path(ti)
    fl =tt.is_dir()
    if fl:
        print(f" it is DIR -> {tt}") 
    else :
        print(f" Is File -> {tt}")
What do you think?
Thank you
Reply
#4
(Jun-21-2021, 09:38 PM)tester_V Wrote: I came up with this snipped (see below) it is working but somehow it does not look nice.
You add stuff that is not needed like line 2,3(not pathlib but OS Module).
Look at code to bowlofred if i use it with your print() function.
You should get same output with this code.
import pathlib

mydir = 'c:\\02'
for file_object in pathlib.Path(mydir).iterdir():
    if file_object.is_file():
         print(f" Is File -> {file_object}")
    else:
        print(f" it is DIR -> {file_object}") 
.iterdir() dos the same as os.listdir()
Look at this link as i posted in your other thread Python 3's pathlib Module: Taming the File System.
tester_V likes this post
Reply
#5
to snippsat,
I'm confused, man!
Sometimes, for some reason, it looks complicated.
I really appreciate your and everyone help!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Pathlib import not working chriswrcg 9 3,524 May-29-2022, 07:37 PM
Last Post: snippsat
  WebDriverException: Message: 'PATH TO CHROME DRIVER' executable needs to be in PATH Led_Zeppelin 1 2,151 Sep-09-2021, 01:25 PM
Last Post: Yoriz
  deleting an empty Dir, using pathlib.Path tester_V 9 5,675 Jul-01-2021, 01:53 PM
Last Post: Gribouillis
  pathlib destpath.exists() true even file does not exist NaN 9 4,567 Dec-01-2020, 12:43 PM
Last Post: NaN
  Question about if with () or without () / pathlib Tecuma 3 2,157 Apr-02-2020, 10:02 AM
Last Post: Tecuma
  pathlib hanging bluefrog 2 3,089 Sep-25-2018, 12:59 PM
Last Post: volcano63
  pathlib: resolving a path that does not exist Skaperen 6 5,390 Sep-08-2018, 12:25 AM
Last Post: Skaperen
  makin hardlinks with pathlib.Path Skaperen 2 5,171 Sep-06-2018, 07:53 AM
Last Post: scidam
  Need help using pathlib to read text file into dictionary gwilli3 4 4,132 Aug-13-2018, 06:21 PM
Last Post: gwilli3
  How does pathlib.Path.rename work? wavic 7 16,796 Aug-02-2018, 10:58 AM
Last Post: wavic

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020