Reputation: 11
I have three lists and one string variable:
var = "http:/domain.com"
directories = ['dir_A', 'dir_B', 'dir_C']
files = ['file_A', 'file_B', 'file_C']
extensions = ['ext_A', 'ext_B']
I want to print a pattern EXACTLY like this:
http:/domain.com/
http:/domain.com/dir_A/
http:/domain.com/dir_A/file_A.ext_A
http:/domain.com/dir_A/file_A.ext_B
http:/domain.com/dir_A/file_B.ext_A
http:/domain.com/dir_A/file_B.ext_B
http:/domain.com/dir_A/file_C.ext_A
http:/domain.com/dir_A/file_C.ext_B
http:/domain.com/dir_A/dir_B/
http:/domain.com/dir_A/dir_B/file_A.ext_A
http:/domain.com/dir_A/dir_B/file_A.ext_B
http:/domain.com/dir_A/dir_B/file_B.ext_A
http:/domain.com/dir_A/dir_B/file_B.ext_B
http:/domain.com/dir_A/dir_B/file_C.ext_A
http:/domain.com/dir_A/dir_B/file_C.ext_B
http:/domain.com/dir_A/dir_B/dir_C/
http:/domain.com/dir_A/dir_B/dir_C/file_A.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_A.ext_B
http:/domain.com/dir_A/dir_B/dir_C/file_B.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_B.ext_B
http:/domain.com/dir_A/dir_B/dir_C/file_C.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_C.ext_B
http:/domain.com/dir_A/dir_C/
http:/domain.com/dir_A/dir_C/file_A.ext_A
http:/domain.com/dir_A/dir_C/file_A.ext_B
http:/domain.com/dir_A/dir_C/file_B.ext_A
http:/domain.com/dir_A/dir_C/file_B.ext_B
http:/domain.com/dir_A/dir_C/file_C.ext_A
http:/domain.com/dir_A/dir_C/file_C.ext_B
http:/domain.com/dir_A/dir_C/dir_B/
http:/domain.com/dir_A/dir_C/dir_B/file_A.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_A.ext_B
http:/domain.com/dir_A/dir_C/dir_B/file_B.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_B.ext_B
http:/domain.com/dir_A/dir_C/dir_B/file_C.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_C.ext_B
This was only for for the case http:/domain.com/dir_A/...
And son on for the cases http:/domain.com/dir_B/...
and http:/domain.com/dir_C/...
I have tried myself but I wasn't successful to achieve the required pattern
Any help will be appreciated
Upvotes: 0
Views: 65
Reputation: 13079
If you want to implement generating the various permutations of directories yourself, you could use a recursive function. Once you have the directory, the files and extensions are straightforward.
#!/usr/bin/env python
var = "http:/domain.com"
directories = ["dir_A", "dir_B", "dir_C"]
files = ["file_A", "file_B", "file_C"]
extensions = ["ext_A", "ext_B"]
root = var + '/'
def combos(dirs):
if len(dirs) == 1:
return [dirs[:]]
else:
c = []
for i in range(len(dirs)):
c.append([dirs[i]])
c.extend([[dirs[i]] + combo
for combo in combos(dirs[:i] + dirs[i+1:])])
return c
print(root)
for combo in combos(directories):
prefix = root + ''.join([d + '/' for d in combo])
print('\n' + prefix)
for file in files:
for ext in extensions:
print(prefix + file + '.' + ext)
output:
http:/domain.com/
http:/domain.com/dir_A/
http:/domain.com/dir_A/file_A.ext_A
http:/domain.com/dir_A/file_A.ext_B
http:/domain.com/dir_A/file_B.ext_A
http:/domain.com/dir_A/file_B.ext_B
http:/domain.com/dir_A/file_C.ext_A
http:/domain.com/dir_A/file_C.ext_B
http:/domain.com/dir_A/dir_B/
http:/domain.com/dir_A/dir_B/file_A.ext_A
http:/domain.com/dir_A/dir_B/file_A.ext_B
http:/domain.com/dir_A/dir_B/file_B.ext_A
http:/domain.com/dir_A/dir_B/file_B.ext_B
http:/domain.com/dir_A/dir_B/file_C.ext_A
http:/domain.com/dir_A/dir_B/file_C.ext_B
http:/domain.com/dir_A/dir_B/dir_C/
http:/domain.com/dir_A/dir_B/dir_C/file_A.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_A.ext_B
http:/domain.com/dir_A/dir_B/dir_C/file_B.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_B.ext_B
http:/domain.com/dir_A/dir_B/dir_C/file_C.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_C.ext_B
http:/domain.com/dir_A/dir_C/
http:/domain.com/dir_A/dir_C/file_A.ext_A
http:/domain.com/dir_A/dir_C/file_A.ext_B
http:/domain.com/dir_A/dir_C/file_B.ext_A
http:/domain.com/dir_A/dir_C/file_B.ext_B
http:/domain.com/dir_A/dir_C/file_C.ext_A
http:/domain.com/dir_A/dir_C/file_C.ext_B
http:/domain.com/dir_A/dir_C/dir_B/
http:/domain.com/dir_A/dir_C/dir_B/file_A.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_A.ext_B
http:/domain.com/dir_A/dir_C/dir_B/file_B.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_B.ext_B
http:/domain.com/dir_A/dir_C/dir_B/file_C.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_C.ext_B
http:/domain.com/dir_B/
http:/domain.com/dir_B/file_A.ext_A
http:/domain.com/dir_B/file_A.ext_B
http:/domain.com/dir_B/file_B.ext_A
http:/domain.com/dir_B/file_B.ext_B
http:/domain.com/dir_B/file_C.ext_A
http:/domain.com/dir_B/file_C.ext_B
http:/domain.com/dir_B/dir_A/
http:/domain.com/dir_B/dir_A/file_A.ext_A
http:/domain.com/dir_B/dir_A/file_A.ext_B
http:/domain.com/dir_B/dir_A/file_B.ext_A
http:/domain.com/dir_B/dir_A/file_B.ext_B
http:/domain.com/dir_B/dir_A/file_C.ext_A
http:/domain.com/dir_B/dir_A/file_C.ext_B
http:/domain.com/dir_B/dir_A/dir_C/
http:/domain.com/dir_B/dir_A/dir_C/file_A.ext_A
http:/domain.com/dir_B/dir_A/dir_C/file_A.ext_B
http:/domain.com/dir_B/dir_A/dir_C/file_B.ext_A
http:/domain.com/dir_B/dir_A/dir_C/file_B.ext_B
http:/domain.com/dir_B/dir_A/dir_C/file_C.ext_A
http:/domain.com/dir_B/dir_A/dir_C/file_C.ext_B
http:/domain.com/dir_B/dir_C/
http:/domain.com/dir_B/dir_C/file_A.ext_A
http:/domain.com/dir_B/dir_C/file_A.ext_B
http:/domain.com/dir_B/dir_C/file_B.ext_A
http:/domain.com/dir_B/dir_C/file_B.ext_B
http:/domain.com/dir_B/dir_C/file_C.ext_A
http:/domain.com/dir_B/dir_C/file_C.ext_B
http:/domain.com/dir_B/dir_C/dir_A/
http:/domain.com/dir_B/dir_C/dir_A/file_A.ext_A
http:/domain.com/dir_B/dir_C/dir_A/file_A.ext_B
http:/domain.com/dir_B/dir_C/dir_A/file_B.ext_A
http:/domain.com/dir_B/dir_C/dir_A/file_B.ext_B
http:/domain.com/dir_B/dir_C/dir_A/file_C.ext_A
http:/domain.com/dir_B/dir_C/dir_A/file_C.ext_B
http:/domain.com/dir_C/
http:/domain.com/dir_C/file_A.ext_A
http:/domain.com/dir_C/file_A.ext_B
http:/domain.com/dir_C/file_B.ext_A
http:/domain.com/dir_C/file_B.ext_B
http:/domain.com/dir_C/file_C.ext_A
http:/domain.com/dir_C/file_C.ext_B
http:/domain.com/dir_C/dir_A/
http:/domain.com/dir_C/dir_A/file_A.ext_A
http:/domain.com/dir_C/dir_A/file_A.ext_B
http:/domain.com/dir_C/dir_A/file_B.ext_A
http:/domain.com/dir_C/dir_A/file_B.ext_B
http:/domain.com/dir_C/dir_A/file_C.ext_A
http:/domain.com/dir_C/dir_A/file_C.ext_B
http:/domain.com/dir_C/dir_A/dir_B/
http:/domain.com/dir_C/dir_A/dir_B/file_A.ext_A
http:/domain.com/dir_C/dir_A/dir_B/file_A.ext_B
http:/domain.com/dir_C/dir_A/dir_B/file_B.ext_A
http:/domain.com/dir_C/dir_A/dir_B/file_B.ext_B
http:/domain.com/dir_C/dir_A/dir_B/file_C.ext_A
http:/domain.com/dir_C/dir_A/dir_B/file_C.ext_B
http:/domain.com/dir_C/dir_B/
http:/domain.com/dir_C/dir_B/file_A.ext_A
http:/domain.com/dir_C/dir_B/file_A.ext_B
http:/domain.com/dir_C/dir_B/file_B.ext_A
http:/domain.com/dir_C/dir_B/file_B.ext_B
http:/domain.com/dir_C/dir_B/file_C.ext_A
http:/domain.com/dir_C/dir_B/file_C.ext_B
http:/domain.com/dir_C/dir_B/dir_A/
http:/domain.com/dir_C/dir_B/dir_A/file_A.ext_A
http:/domain.com/dir_C/dir_B/dir_A/file_A.ext_B
http:/domain.com/dir_C/dir_B/dir_A/file_B.ext_A
http:/domain.com/dir_C/dir_B/dir_A/file_B.ext_B
http:/domain.com/dir_C/dir_B/dir_A/file_C.ext_A
http:/domain.com/dir_C/dir_B/dir_A/file_C.ext_B
Upvotes: 1
Reputation: 82899
You will need combinations
, permutations
, and product
from the itertools
module to get all those variations:
from itertools import permutations, combinations, product
def combine(dom, dirs, files, exts):
return ('/'.join((dom, *perm, f"{f}.{e}"))
for i in range(len(dirs)+1)
for comb in combinations(dirs, i)
for perm in permutations(comb)
for f, e in product(files, exts))
for x in combine(var, directories, files, extensions):
print(x)
Output (96 in total; note that I changed all \
to /
and changed the domain):
http://example.com/file_A.ext_A
...
http://example.com/dir_A/dir_C/file_C.ext_B
...
http://example.com/dir_C/dir_B/dir_A/file_C.ext_B
Upvotes: 2
Reputation: 365
You can do as follows:
from itertools import product
var = "http:\\\\domain.com"
directories = ["dir_A", "dir_B", "dir_C"]
files = ["file_A", "file_B", "file_C"]
extensions = ["ext_A", "ext_B"]
nestDir = ""
for directory in directories:
nestDir = nestDir + "\\\\" + directory
for file, ext in product(files, extensions):
print(var + nestDir + "\\\\" + file + "." + ext)
Upvotes: 0
Reputation: 489
I'm guessing you want forward slashes, but I coded it as you requested. You forgot to quote some strings in your prompt.
#!/usr/bin/env python3
import itertools
var = "http:/domain.com"
directories = ["dir_A", "dir_B", "dir_C"]
files = ["file_A", "file_B", "file_C"]
extensions = ["ext_A", "ext_B"]
print(var + "/")
print()
for dir in directories:
print(var + "/" + dir + "/")
for i in list(itertools.product(files, extensions)):
print("%s/%s/%s.%s" % (var, dir, i[0], i[1]))
print()
Upvotes: 0