os.path.join - errors out - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: os.path.join - errors out (/thread-31085.html) |
os.path.join - errors out - tester_V - Nov-22-2020 Hi, I'm trying to use 'os.walk' to find all the subdirectories and files in the root dir. In the first "for" loop, the code generates an error if I use: os.path.join(root, dirs)to get rid of an error I'm using a workaround : root+'\\'+drI understand 'workaround' is not a good thing to use. Here is the code. import os p = 'c:\\02' for root, dirs, files in os.walk(p): for dr in dirs : #r = os.path.join(root, dirs) #print ("Dir/Path -- ", r) dp = root+'\\'+dr print (dp) for file in files: rf = os.path.join(root, file) print ('Roor+file-->> ',rf)Any help is appriciated! Thank you. RE: os.path.join - errors out - buran - Nov-22-2020 (Nov-22-2020, 07:15 AM)tester_V Wrote: the code generates an errorPlease, post the entire traceback that you get. We need to see the whole thing. Do not just give us the last line. Take a time to read What to include in a post while doing this, compare how you use os.path.join and the workaround. Do you spot the difference (dirs vs dr)? RE: os.path.join - errors out - Axel_Erfurt - Nov-22-2020 for root, dirs, files ... you will get lists of dirs and files os.path.join needs string not list RE: os.path.join - errors out - tester_V - Nov-29-2020 I see your point but I actually have a typo in the code that is why it produced an error. the code below works fine . import os p = 'c:\\02' for root, dirs, files in os.walk(p): for dr in dirs : r = os.path.join(root, dr) print ("Dir/Path -- ", r)thank you for your help! I really appreciate it. RE: os.path.join - errors out - DeaD_EyE - Nov-29-2020 Modern Python: from pathlib import Path data_path = Path('c:\\02') for path in data_path.rglob("*"): if path.is_file(): ... if path.is_dir(): parent = path.parent name = path.name size_mib = path.stat().st_size / 1024**2 if size_mib < 1: # skipping files with less than 1 MiB continue print(name, "->", size_mib)The first party module pathlib has a better abstraction for paths.So if you don't optimize to list 10_000_000 files, pathlib would do its job.You should read this: https://realpython.com/python-pathlib/ The rglob is a recursive glob . It returns a generator and the generator yields Path objects. You can work with Path objects. For example you can get the parent (which is a dir, if the path was pointing to a file). You can get also the stat from files.
|