I use pathlib.Path().iterdir()
to get sub-dictionary of the path.
Under /home/yuanyi/workspace/app
, there are 4 folders: 01
, 02
, 03
, 04
.
from pathlib import Path
for subdir in Path('/home/yuanyi/workspace/app').iterdir():
print(subdir)
But the result is not ordered.
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/00
Wht the result is not the following:
/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
/home/yuanyi/workspace/app/04
I want to know how the iterator works, and what's the best method to get ordered result.
You can use "sorted()"
Built-in Functions Python - sorted()
from pathlib import Path
for subdir in sorted(Path('/some/path').iterdir()):
print(subdir)
NOTE: @NamitJuneja points out, This changes iterating over a generator to iterating over a list. Hence if there are a huge number of files in the memory, loading them all into the memory (by loading them into a list) might cause problems.
On my Mac, the iterdir() method returns the list already sorted. So that looks system dependent. What OS are you using?
Think you should figure out the result from this,
>>> l = ['/home/yuanyi/workspace/app/02',
'/home/yuanyi/workspace/app/03', '/home/yuanyi/workspace/app/01']
>>> for i in sorted(l, key=lambda m: int(m.split('/')[-1])):
print i
/home/yuanyi/workspace/app/01
/home/yuanyi/workspace/app/02
/home/yuanyi/workspace/app/03
>>>
or
for i in sorted(l, key=lambda m: int(m.split(os.sep)[-1])):
print i
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With