Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How would I create a list based on matching path strings in Python?

I'm basically trying to seperate file path strings into lists of files in the same path. Lets say I have this list:

files = ['user/hey.jpg','user/folder1/1.txt','user/folder1/folder2/random.txt',
         'user/folder1/blah.txt','user/folder3/folder4/folder5/1.txt',
         'user/folder3/folder4/folder5/3.txt','user/folder3/folder4/folder5/2.txt',
         'user/1.jpg']

I'm looking to get this output (not concerned about the order):

[
 ['user/folder1/1.txt','user/folder1/blah.txt']
 ['user/folder1/folder2/random.txt']
 ['user/folder3/folder4/folder5/1.txt',
  'user/folder3/folder4/folder5/2.txt','user/folder3/folder4/folder5/3.txt']
 ['user/1.jpg','user/hey.jpg']
]

Sorry if my example is sloppy. Typing on a phone is no fun. Any help is appreciated!

like image 684
DarkMatter Avatar asked Jul 12 '26 20:07

DarkMatter


2 Answers

Use os.path.dirname as key in sorted and groupby functions should lead you to the results:

import os
from itertools import groupby
[list(g) for _, g in groupby(sorted(files, key=os.path.dirname), key=os.path.dirname)]

#[['user/hey.jpg', 'user/1.jpg'],
# ['user/folder1/1.txt', 'user/folder1/blah.txt'],
# ['user/folder1/folder2/random.txt'],
# ['user/folder3/folder4/folder5/1.txt',
#  'user/folder3/folder4/folder5/3.txt',
#  'user/folder3/folder4/folder5/2.txt']]
like image 147
Psidom Avatar answered Jul 15 '26 09:07

Psidom


Try this:

import collections
results = defaultdict(list)
for path in files:
    results[os.path.dirname(path)].append(path)
like image 26
John Zwinck Avatar answered Jul 15 '26 10:07

John Zwinck