簡體   English   中英

Python - 打印特定圖案

[英]Python - Printing a specific pattern

我有三個列表和一個字符串變量:

var = "http:/domain.com"
directories = ['dir_A', 'dir_B', 'dir_C']
files = ['file_A', 'file_B', 'file_C']
extensions = ['ext_A', 'ext_B']

我想打印一個完全像這樣的模式:

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_A/...

兒子的情況http:/domain.com/dir_B/...http:/domain.com/dir_C/...

我已經嘗試過自己,但未能成功實現所需的模式

任何幫助將不勝感激

您將需要來自itertools模塊的combinationspermutationsproduct來獲得所有這些變體:

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 個;請注意,我將所有\更改為/並更改了域):

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

如果您想自己實現生成目錄的各種排列,您可以使用遞歸 function。 獲得目錄后,文件和擴展名就很簡單了。

#!/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

我猜您想要正斜杠,但我按照您的要求對其進行了編碼。 您忘記在提示中引用一些字符串。

#!/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()

您可以執行以下操作:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM