Python glob หลายประเภทไฟล์


150

มีวิธีที่ดีกว่าในการใช้ glob.glob ใน python เพื่อรับรายการประเภทไฟล์หลายประเภทเช่น. txt, .mdown และ. markdown หรือไม่ ตอนนี้ฉันมีสิ่งนี้:

projectFiles1 = glob.glob( os.path.join(projectDir, '*.txt') )
projectFiles2 = glob.glob( os.path.join(projectDir, '*.mdown') )
projectFiles3 = glob.glob( os.path.join(projectDir, '*.markdown') )

1
เกี่ยวข้องกันมาก: stackoverflow.com/q/48181073/880783
bers

ทำไมไม่main_file = projectFiles1 + projectFiles2 + projectFiles3? ซึ่งจะนำไปสู่รายการหลักที่มีทุกประเภทด้วยการเรียงต่อกัน
Cool Cloud

คำตอบ:


166

อาจมีวิธีที่ดีกว่านี้ แต่วิธีการ:

import glob
types = ('*.pdf', '*.cpp') # the tuple of file types
files_grabbed = []
for files in types:
    files_grabbed.extend(glob.glob(files))

# files_grabbed is the list of pdf and cpp files

อาจมีวิธีอื่นดังนั้นรอเผื่อว่ามีคนอื่นมาตอบดีกว่า


25
files_grabbed = [glob.glob(e) for e in ['*.pdf', '*.cpp']]
Novitoll

13
วิธีแก้ปัญหาของ Novitoll นั้นสั้น แต่ท้ายที่สุดแล้วการสร้างรายการที่ซ้อนกัน
robroc

10
คุณสามารถทำได้เสมอ;)[f for f_ in [glob.glob(e) for e in ('*.jpg', '*.mp4')] for f in f_]
AlexG

1
files_grabbed = [ glob.glob (e) สำหรับ e ใน [' .pdf', '* .cpp']]
florisla

3
สิ่งนี้จะวนซ้ำสองครั้งในรายการไฟล์ ในการทำซ้ำครั้งแรกจะตรวจสอบ * .pdf และในครั้งที่สองจะตรวจสอบ * .cpp มีวิธีทำให้เสร็จในการทำซ้ำครั้งเดียวหรือไม่? ตรวจสอบเงื่อนไขรวมในแต่ละครั้ง?
Ridhuvarshan

52
from glob import glob

files = glob('*.gif')
files.extend(glob('*.png'))
files.extend(glob('*.jpg'))

print(files)

หากคุณต้องการระบุเส้นทางให้วนซ้ำรูปแบบการจับคู่และคงการรวมไว้ในลูปเพื่อความเรียบง่าย:

from os.path import join
from glob import glob

files = []
for ext in ('*.gif', '*.png', '*.jpg'):
   files.extend(glob(join("path/to/dir", ext)))

print(files)

50

glob ส่งคืนรายการ: ทำไมไม่เพียงแค่เรียกใช้หลายครั้งและเชื่อมต่อผลลัพธ์?

from glob import glob
project_files = glob('*.txt') + glob('*.mdown') + glob('*.markdown')

3
นี่อาจเป็นโซลูชันที่อ่านได้ง่ายที่สุด ฉันจะเปลี่ยนกรณีของProjectFilesเป็นprojectFilesแต่วิธีแก้ปัญหาที่ดี
Hans Goldman

42

เชื่อมโยงผลลัพธ์:

import itertools as it, glob

def multiple_file_types(*patterns):
    return it.chain.from_iterable(glob.iglob(pattern) for pattern in patterns)

จากนั้น:

for filename in multiple_file_types("*.txt", "*.sql", "*.log"):
    # do stuff

14
glob.glob -> glob.iglob เพื่อให้ห่วงโซ่ตัววนซ้ำถูกประเมินอย่างเต็มที่
rodrigob

1
ผมพบว่าวิธีการแก้ปัญหาเหมือนกัน chain.from_iterableแต่ไม่ทราบเกี่ยวกับ ดังนั้นนี่คือที่คล้ายกัน it.chain(*(glob.iglob(pattern) for pattern in patterns))แต่สามารถอ่านได้น้อย:
florisla

21

คำตอบมากมายที่แนะนำให้ globbing หลาย ๆ ครั้งตามจำนวนส่วนขยายฉันต้องการ globbing เพียงครั้งเดียวแทน:

from pathlib import Path

files = {p.resolve() for p in Path(path).glob("**/*") if p.suffix in [".c", ".cc", ".cpp", ".hxx", ".h"]}

15

ด้วย glob มันเป็นไปไม่ได้ คุณสามารถใช้ได้เฉพาะ:
* ตรงกับทุกอย่าง
? จับคู่อักขระเดี่ยวใด ๆ
[seq] ตรงกับอักขระใด ๆ ใน seq
[! seq] ตรงกับอักขระใด ๆ ที่ไม่อยู่ใน seq

ใช้ os.listdir และ regexp เพื่อตรวจสอบรูปแบบ:

for x in os.listdir('.'):
  if re.match('.*\.txt|.*\.sql', x):
    print x

11
จบ regex ของคุณด้วย $ เพื่อให้ตรงกับส่วนท้ายของชื่อไฟล์เท่านั้น
ThiefMaster

1
ฉันชอบวิธีนี้ - หากการแสดงออกของ glob ไม่ทรงพลังเพียงพอให้อัปเกรดเป็นระบบ regex ที่มีประสิทธิภาพมากขึ้นอย่าแฮ็คโดยใช้เช่นitertoolsเพราะการเปลี่ยนแปลงรูปแบบในภายหลังจะต้องแฮ็กด้วย(บอกว่าคุณต้องการอนุญาตตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก) . โอ้และมันอาจจะดีกว่าถ้าเขียน'.*\.(txt|sql)'
metakermit

มีเหตุผลใดที่จะชอบ os.listdir ('.') มากกว่า glob.iglob (' . ')?
Mr.WorshipMe

15

ตัวอย่างเช่นสำหรับ*.mp3และ*.flacในหลายโฟลเดอร์คุณสามารถทำได้:

mask = r'music/*/*.[mf][pl][3a]*'
glob.glob(mask)

แนวคิดนี้สามารถขยายเป็นนามสกุลไฟล์เพิ่มเติมได้แต่คุณต้องตรวจสอบว่าชุดค่าผสมนั้นไม่ตรงกับนามสกุลไฟล์อื่น ๆ ที่ไม่ต้องการที่คุณอาจมีในโฟลเดอร์เหล่านั้น ดังนั้นระวังเรื่องนี้ด้วย

หากต้องการรวมรายการส่วนขยายโดยพลการเป็นรูปแบบลูกโลกเดียวโดยอัตโนมัติคุณสามารถทำสิ่งต่อไปนี้:

mask_base = r'music/*/*.'
exts = ['mp3', 'flac', 'wma']
chars = ''.join('[{}]'.format(''.join(set(c))) for c in zip(*exts))
mask = mask_base + chars + ('*' if len(set(len(e) for e in exts)) > 1 else '')
print(mask)  # music/*/*.[fmw][plm][3a]*

6

ซับเดียว Just for the hell of it ..

folder = "C:\\multi_pattern_glob_one_liner"
files = [item for sublist in [glob.glob(folder + ext) for ext in ["/*.txt", "/*.bat"]] for item in sublist]

เอาต์พุต:

['C:\\multi_pattern_glob_one_liner\\dummy_txt.txt', 'C:\\multi_pattern_glob_one_liner\\dummy_bat.bat']

6

แม้ว่า glob เริ่มต้นของ Python จะไม่ตามหลัง Bash's glob แต่คุณสามารถทำสิ่งนี้กับไลบรารีอื่น ๆ ได้ เราสามารถเปิดใช้งานในการจัดฟันglob wcmatch ของ

>>> from wcmatch import glob
>>> glob.glob('*.{md,ini}', flags=glob.BRACE)
['LICENSE.md', 'README.md', 'tox.ini']

คุณยังสามารถใช้รูปแบบลูกโลกขยายได้หากคุณต้องการ:

from wcmatch import glob
>>> glob.glob('*.@(md|ini)', flags=glob.EXTGLOB)
['LICENSE.md', 'README.md', 'tox.ini']

นี่ไม่เอาrecursiveธง
Shamoon

@Shamoon ไม่เอาglob.GLOBSTARธง
facelessuser

4

หลังจากมาที่นี่เพื่อขอความช่วยเหลือฉันได้แก้ไขปัญหาของตัวเองและต้องการแบ่งปัน มันขึ้นอยู่กับคำตอบของ user2363986 แต่ฉันคิดว่ามันปรับขนาดได้มากกว่า หมายความว่าหากคุณมีส่วนขยาย 1,000 รายการโค้ดจะยังดูดีอยู่บ้าง

from glob import glob

directoryPath  = "C:\\temp\\*." 
fileExtensions = [ "jpg", "jpeg", "png", "bmp", "gif" ]
listOfFiles    = []

for extension in fileExtensions:
    listOfFiles.extend( glob( directoryPath + extension ))

for file in listOfFiles:
    print(file)   # Or do other stuff

ไม่ได้ผลสำหรับฉัน ฉันใช้directoryPath = "/Users/bla/bla/images_dir*."
NeStack

ฉันต้องการข้อมูลเพิ่มเติมเพื่อแก้ไขข้อบกพร่องนี้ให้คุณ ... คุณได้รับข้อยกเว้นหรือไม่? นอกจากนี้หากคุณใช้ Windows เส้นทางนั้นดูเหมือนจะไม่ทำงาน (ไม่มีอักษรระบุไดรฟ์)
Hans Goldman

4

นี่คือตัวแปรความเข้าใจในรายการบรรทัดเดียวของคำตอบของ Pat (ซึ่งรวมถึงสิ่งที่คุณต้องการ glob ในไดเรกทอรีโครงการเฉพาะ):

import os, glob
exts = ['*.txt', '*.mdown', '*.markdown']
files = [f for ext in exts for f in glob.glob(os.path.join(project_dir, ext))]

คุณวนซ้ำส่วนขยาย ( for ext in exts) จากนั้นสำหรับแต่ละส่วนขยายคุณนำแต่ละไฟล์ที่ตรงกับรูปแบบ glob ( for f in glob.glob(os.path.join(project_dir, ext))

โซลูชันนี้สั้นและไม่มีสำหรับลูปความเข้าใจรายการที่ซ้อนกันหรือฟังก์ชันที่ไม่จำเป็นเพื่อถ่วงรหัส เพียงแค่บริสุทธิ์แสดงออก pythonic เซน

โซลูชันนี้ช่วยให้คุณมีรายการที่กำหนดเองextsซึ่งสามารถเปลี่ยนแปลงได้โดยไม่ต้องอัปเดตโค้ดของคุณ (นี่เป็นแนวทางปฏิบัติที่ดีเสมอ!)

ความเข้าใจในรายการเป็นแบบเดียวกับที่ใช้ในโซลูชันของ Laurent (ซึ่งฉันโหวตให้) แต่ฉันจะเถียงว่าโดยปกติแล้วไม่จำเป็นที่จะต้องแยกบรรทัดเดียวไปยังฟังก์ชันแยกต่างหากซึ่งเป็นเหตุผลว่าทำไมฉันจึงให้สิ่งนี้เป็นทางเลือกอื่น

โบนัส:

หากคุณต้องการค้นหาไม่ใช่แค่ไดเร็กทอรีเดียว แต่ยังรวมถึงไดเร็กทอรีย่อยทั้งหมดด้วยคุณสามารถส่งผ่านrecursive=Trueและใช้สัญลักษณ์ glob หลายไดเร็กทอรี** 1 :

files = [f for ext in exts 
         for f in glob.glob(os.path.join(project_dir, '**', ext), recursive=True)]

สิ่งนี้จะเรียกglob.glob('<project_dir>/**/*.txt', recursive=True)และอื่น ๆ สำหรับแต่ละส่วนขยาย

1 ในทางเทคนิค**สัญลักษณ์ลูกโลกจะจับคู่อักขระตั้งแต่หนึ่งตัวขึ้นไปรวมถึงเครื่องหมายทับ / (ไม่เหมือนกับ*สัญลักษณ์ลูกโลกเอกพจน์) ในทางปฏิบัติคุณต้องจำไว้ว่าตราบใดที่คุณล้อมรอบ**ด้วยเครื่องหมายทับ (ตัวคั่นเส้นทาง) มันจะตรงกับไดเรกทอรีศูนย์หรือมากกว่านั้น


4
files = glob.glob('*.txt')
files.extend(glob.glob('*.dat'))

4
คำตอบที่ดียังให้คำอธิบายเกี่ยวกับโค้ดและบางทีเหตุผลบางประการของคุณที่อยู่เบื้องหลังโค้ด
SunSparc

3

ฉันได้รับการปล่อยตัวฟอร์มิคซึ่งหลายการดำเนินการรวมถึงในทางที่คล้ายกับ Apache Ant ของfileset และก้อน

การค้นหาสามารถดำเนินการได้:

import formic
patterns = ["*.txt", "*.markdown", "*.mdown"]
fileset = formic.FileSet(directory=projectDir, include=patterns)
for file_name in fileset.qualified_files():
    # Do something with file_name

เนื่องจาก Ant glob เต็มรูปแบบถูกนำไปใช้คุณจึงสามารถรวมไดเร็กทอรีที่แตกต่างกันในแต่ละรูปแบบได้ดังนั้นคุณจึงสามารถเลือกเฉพาะไฟล์. txt เหล่านั้นในไดเร็กทอรีย่อยเดียวและ. markdown ในไดเร็กทอรีอื่นตัวอย่างเช่น:

patterns = [ "/unformatted/**/*.txt", "/formatted/**/*.mdown" ]

ฉันหวังว่านี่จะช่วยได้.


3

ฟังก์ชัน_globglobs ต่อไปนี้สำหรับนามสกุลไฟล์หลายไฟล์

import glob
import os
def _glob(path, *exts):
    """Glob for multiple file extensions

    Parameters
    ----------
    path : str
        A file name without extension, or directory name
    exts : tuple
        File extensions to glob for

    Returns
    -------
    files : list
        list of files matching extensions in exts in path

    """
    path = os.path.join(path, "*") if os.path.isdir(path) else path + "*"
    return [f for files in [glob.glob(path + ext) for ext in exts] for f in files]

files = _glob(projectDir, ".txt", ".mdown", ".markdown")

3

นี่คือpathlibโซลูชันPython 3.4+ :

exts = ".pdf", ".doc", ".xls", ".csv", ".ppt"
filelist = (str(i) for i in map(pathlib.Path, os.listdir(src)) if i.suffix.lower() in exts and not i.stem.startswith("~"))

นอกจากนี้ยังละเว้นชื่อไฟล์ทั้งหมดที่ขึ้นต้นด้วย~.


2

ไม่globแต่นี่เป็นอีกวิธีหนึ่งในการใช้การทำความเข้าใจรายการ:

extensions = 'txt mdown markdown'.split()
projectFiles = [f for f in os.listdir(projectDir) 
                  if os.path.splitext(f)[1][1:] in extensions]

1

คุณสามารถลองสร้างรายการด้วยตนเองโดยเปรียบเทียบส่วนขยายที่มีอยู่กับส่วนขยายที่คุณต้องการ

ext_list = ['gif','jpg','jpeg','png'];
file_list = []
for file in glob.glob('*.*'):
  if file.rsplit('.',1)[1] in ext_list :
    file_list.append(file)


1

หากต้องการglobไฟล์หลายประเภทคุณต้องเรียกglob()ใช้ฟังก์ชันหลาย ๆ ครั้งแบบวนซ้ำ เนื่องจากฟังก์ชันนี้ส่งคืนรายการคุณจึงต้องเชื่อมรายการเข้าด้วยกัน

ตัวอย่างเช่นฟังก์ชั่นนี้ทำงาน:

import glob
import os


def glob_filetypes(root_dir, *patterns):
    return [path
            for pattern in patterns
            for path in glob.glob(os.path.join(root_dir, pattern))]

ใช้งานง่าย:

project_dir = "path/to/project/dir"
for path in sorted(glob_filetypes(project_dir, '*.txt', '*.mdown', '*.markdown')):
    print(path)

คุณยังสามารถใช้glob.iglob()ตัววนซ้ำ:

ส่งคืนตัวทำซ้ำซึ่งให้ค่าเดียวกับ glob () โดยไม่ต้องจัดเก็บทั้งหมดพร้อมกัน

def iglob_filetypes(root_dir, *patterns):
    return (path
            for pattern in patterns
            for path in glob.iglob(os.path.join(root_dir, pattern)))

1

ใช้รายการส่วนขยายและทำซ้ำ

from os.path import join
from glob import glob

files = []
extensions = ['*.gif', '*.png', '*.jpg']
for ext in extensions:
   files.extend(glob(join("path/to/dir", ext)))

print(files)

0

คุณสามารถใช้ตัวกรอง:

import os
import glob

projectFiles = filter(
    lambda x: os.path.splitext(x)[1] in [".txt", ".mdown", ".markdown"]
    glob.glob(os.path.join(projectDir, "*"))
)

0

คุณสามารถใช้reduce()ดังนี้:

import glob
file_types = ['*.txt', '*.mdown', '*.markdown']
project_files = reduce(lambda list1, list2: list1 + list2, (glob.glob(t) for t in file_types))

สิ่งนี้จะสร้างรายการจากglob.glob()สำหรับแต่ละรูปแบบและลดเป็นรายการเดียว


0

ลูกโลกเดียวหลายนามสกุล ... แต่วิธีแก้ปัญหาไม่สมบูรณ์ (อาจตรงกับไฟล์อื่น ๆ )

filetypes = ['tif', 'jpg']

filetypes = zip(*[list(ft) for ft in filetypes])
filetypes = ["".join(ch) for ch in filetypes]
filetypes = ["[%s]" % ch for ch in filetypes]
filetypes = "".join(filetypes) + "*"
print(filetypes)
# => [tj][ip][fg]*

glob.glob("/path/to/*.%s" % filetypes)

0

ฉันมีปัญหาเดียวกันและนี่คือสิ่งที่ฉันคิดขึ้นมา

import os, sys, re

#without glob

src_dir = '/mnt/mypics/'
src_pics = []
ext = re.compile('.*\.(|{}|)$'.format('|'.join(['png', 'jpeg', 'jpg']).encode('utf-8')))
for root, dirnames, filenames in os.walk(src_dir):
  for filename in filter(lambda name:ext.search(name),filenames):
    src_pics.append(os.path.join(root, filename))

0

อีกวิธีหนึ่ง (ใช้globเพื่อรับเส้นทางโดยใช้การจับคู่หลายรายการpatternsและรวมเส้นทางทั้งหมดไว้ในรายการเดียวโดยใช้reduceและadd):

import functools, glob, operator
paths = functools.reduce(operator.add, [glob.glob(pattern) for pattern in [
    "path1/*.ext1",
    "path2/*.ext2"]])

0

หากคุณใช้pathlibลองสิ่งนี้:

import pathlib

extensions = ['.py', '.txt']
root_dir = './test/'

files = filter(lambda p: p.suffix in extensions, pathlib.Path(root_dir).glob('**/*'))

print(list(files))

0

จากผลลัพธ์ที่ฉันได้รับจากการทดสอบเชิงประจักษ์ปรากฎว่าglob.globไม่ใช่วิธีที่ดีกว่าในการกรองไฟล์ตามนามสกุล เหตุผลบางประการคือ:

  • " ภาษา " แบบ globbing ไม่อนุญาตให้มีข้อกำหนดที่สมบูรณ์แบบของส่วนขยายหลายรายการ
  • จุดเดิมทำให้ได้ผลลัพธ์ที่ไม่ถูกต้องขึ้นอยู่กับนามสกุลไฟล์
  • วิธี globbing ได้รับการพิสูจน์เชิงประจักษ์ว่าช้ากว่าวิธีอื่น ๆ ส่วนใหญ่
  • แม้ว่ามันจะแปลกแม้แต่ออบเจ็กต์ระบบไฟล์อื่น ๆ ก็สามารถมี " นามสกุล " โฟลเดอร์ได้เช่นกัน

ฉันได้ทดสอบ (เพื่อความถูกต้องและมีประสิทธิภาพทันเวลา) 4วิธีต่างๆต่อไปนี้ในการกรองไฟล์ตามนามสกุลและวางไว้ในlist:

from glob import glob, iglob
from re import compile, findall
from os import walk


def glob_with_storage(args):

    elements = ''.join([f'[{i}]' for i in args.extensions])
    globs = f'{args.target}/**/*{elements}'
    results = glob(globs, recursive=True)

    return results


def glob_with_iteration(args):

    elements = ''.join([f'[{i}]' for i in args.extensions])
    globs = f'{args.target}/**/*{elements}'
    results = [i for i in iglob(globs, recursive=True)]

    return results


def walk_with_suffixes(args):

    results = []
    for r, d, f in walk(args.target):
        for ff in f:
            for e in args.extensions:
                if ff.endswith(e):
                    results.append(path_join(r,ff))
                    break
    return results


def walk_with_regs(args):

    reg = compile('|'.join([f'{i}$' for i in args.extensions]))

    results = []
    for r, d, f in walk(args.target):
        for ff in f:
            if len(findall(reg,ff)):
                results.append(path_join(r, ff))

    return results

ด้วยการเรียกใช้รหัสด้านบนบนแล็ปท็อปของฉันฉันได้รับผลลัพธ์ที่ชัดเจนโดยอัตโนมัติดังต่อไปนี้

Elapsed time for '7 times glob_with_storage()':  0.365023 seconds.
mean   : 0.05214614
median : 0.051861
stdev  : 0.001492152
min    : 0.050864
max    : 0.054853

Elapsed time for '7 times glob_with_iteration()':  0.360037 seconds.
mean   : 0.05143386
median : 0.050864
stdev  : 0.0007847381
min    : 0.050864
max    : 0.052859

Elapsed time for '7 times walk_with_suffixes()':  0.26529 seconds.
mean   : 0.03789857
median : 0.037899
stdev  : 0.0005759071
min    : 0.036901
max    : 0.038896

Elapsed time for '7 times walk_with_regs()':  0.290223 seconds.
mean   : 0.04146043
median : 0.040891
stdev  : 0.0007846776
min    : 0.04089
max    : 0.042885

Results sizes:
0 2451
1 2451
2 2446
3 2446

Differences between glob() and walk():
0 E:\x\y\z\venv\lib\python3.7\site-packages\Cython\Includes\numpy
1 E:\x\y\z\venv\lib\python3.7\site-packages\Cython\Utility\CppSupport.cpp
2 E:\x\y\z\venv\lib\python3.7\site-packages\future\moves\xmlrpc
3 E:\x\y\z\venv\lib\python3.7\site-packages\Cython\Includes\libcpp
4 E:\x\y\z\venv\lib\python3.7\site-packages\future\backports\xmlrpc

Elapsed time for 'main':  1.317424 seconds.

วิธีที่เร็วที่สุดในการกรองไฟล์ตามนามสกุลยังเป็นวิธีที่น่าเกลียดที่สุด ซึ่งก็คือforลูปที่ซ้อนกันและstringการเปรียบเทียบโดยใช้endswith()วิธีการ

ยิ่งไปกว่านั้นอย่างที่คุณเห็นอัลกอริทึม globbing (พร้อมรูปแบบE:\x\y\z\**/*[py][pyc]) แม้จะมีเพียง2ส่วนขยายที่กำหนด ( pyและpyc) ก็ให้ผลลัพธ์ที่ไม่ถูกต้องเช่นกัน


0
import glob
import pandas as pd

df1 = pd.DataFrame(columns=['A'])
for i in glob.glob('C:\dir\path\*.txt'):
    df1 = df1.append({'A': i}, ignore_index=True)
for i in glob.glob('C:\dir\path\*.mdown'):
    df1 = df1.append({'A': i}, ignore_index=True)
for i in glob.glob('C:\dir\path\*.markdown):
    df1 = df1.append({'A': i}, ignore_index=True)

สวัสดี Sway Wu ยินดีต้อนรับ โปรดพิจารณาเพิ่มคำอธิบาย
Tiago Martins Peres 李大仁

0

จากคำตอบก่อนหน้านี้

glob('*.jpg') + glob('*.png')

นี่คือสิ่งที่สั้นกว่า

from glob import glob
extensions = ['jpg', 'png'] # to find these filename extensions

# Method 1: loop one by one and extend to the output list
output = []
[output.extend(glob(f'*.{name}')) for name in extensions]
print(output)

# Method 2: even shorter
# loop filename extension to glob() it and flatten it to a list
output = [p for p2 in [glob(f'*.{name}') for name in extensions] for p in p2]
print(output)

2
การเพิ่มคำอธิบายให้กับตัวอย่างโค้ดนี้จะช่วยปรับปรุงคำตอบนี้
shinjw

-1

สิ่งนี้ควรใช้งานได้:

import glob
extensions = ('*.txt', '*.mdown', '*.markdown')
for i in extensions:
    for files in glob.glob(i):
        print (files)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.