পাইথনে এক্সটেনশন .txt সহ একটি ডিরেক্টরিতে সমস্ত ফাইল সন্ধান করুন


1043

.txtপাইথনে এক্সটেনশন থাকা ডিরেক্টরিতে থাকা সমস্ত ফাইল কীভাবে খুঁজে পাব?

উত্তর:


2352

আপনি ব্যবহার করতে পারেন glob:

import glob, os
os.chdir("/mydir")
for file in glob.glob("*.txt"):
    print(file)

বা সহজভাবে os.listdir:

import os
for file in os.listdir("/mydir"):
    if file.endswith(".txt"):
        print(os.path.join("/mydir", file))

অথবা আপনি যদি ডিরেক্টরিটি অতিক্রম করতে চান তবে ব্যবহার করুন os.walk:

import os
for root, dirs, files in os.walk("/mydir"):
    for file in files:
        if file.endswith(".txt"):
             print(os.path.join(root, file))

11
সমাধান # 2 ব্যবহার করে, আপনি কীভাবে সেই তথ্য দিয়ে একটি ফাইল বা তালিকা তৈরি করবেন?
মার্লিন

72
@ ঘোস্টডোগ :৪: আমার মতে লেখার for file in fচেয়ে এটি লেখার চেয়ে বেশি উপযুক্ত হবে for files in fযেহেতু ভেরিয়েবলের মধ্যে যা আছে তা একক ফাইলের নাম। এমনকি আরও ভাল পরিবর্তন করতে fহবে filesএবং তারপরে লুপগুলি হয়ে যেতে পারে for file in files
মার্টিনিউ

45
@ কম্পিউটার কম্পিউটারসিভার: না, fileএটি কোনও সংরক্ষিত শব্দ নয়, কেবলমাত্র একটি পূর্বনির্ধারিত ফাংশনের নাম, তাই এটি আপনার নিজের কোডে পরিবর্তনশীল নাম হিসাবে ব্যবহার করা বেশ সম্ভব। যদিও এটি সত্য যে সাধারণভাবে এটির মতো সংঘর্ষগুলি এড়ানো উচিত, fileএটি একটি বিশেষ ক্ষেত্রে কারণ এটি ব্যবহারের খুব কমই দরকার ছিল, তাই এটি প্রায়শই গাইডলাইনের ব্যতিক্রম হিসাবে বিবেচিত হয়। আপনি যদি এটি না করতে চান তবে পিইপি 8 এই জাতীয় নামের একটি একক আন্ডারস্কোর যুক্ত করার পরামর্শ দেয়, অর্থাত্ file_, যা আপনাকে সম্মত করতে হবে তা এখনও যথেষ্ট পঠনযোগ্য।
মার্টিনিউ

9
ধন্যবাদ, মার্টিনো, আপনি একদম ঠিক বলেছেন। আমি খুব দ্রুত সিদ্ধান্তে পৌঁছেছি।
কম্পিউটারম্যাকজিভার

40
# 2 এর জন্য আরও একটি পাইথোনিক উপায় ফাইলের জন্য [f. os.listdir ('/ mydir') এর জন্য f.endswith ('। Txt')]] থাকতে পারে:
ওজগুর

247

গ্লোব ব্যবহার করুন ।

>>> import glob
>>> glob.glob('./*.txt')
['./outline.txt', './pip-log.txt', './test.txt', './testingvim.txt']

কেবল এটিই সহজ নয় এটি ক্ষেত্রেও সংবেদনশীল। (কমপক্ষে, এটি উইন্ডোজটিতে যেমন হওয়া উচিত। আমি অন্যান্য ওএস সম্পর্কে নিশ্চিত নই))
জন কোমস

35
আপনার অজগর 3.5 এর নীচে থাকলে পুনরাবৃত্তভাবেglob ফাইলগুলি খুঁজে পেতে পারে না সে বিষয়ে সাবধান হন । আরো অবহিত
Qun

সেরা অংশটি হ'ল আপনি নিয়মিত অভিব্যক্তি পরীক্ষাটি ব্যবহার করতে পারেন * .txt
অ্যালেক্স পুনেনেন

পছন্দ করুন কমপক্ষে লিনাক্সে নয়।
করুহঙ্গা

157

এরকম কিছু কাজ করা উচিত

for root, dirs, files in os.walk(directory):
    for file in files:
        if file.endswith('.txt'):
            print file

73
root, dirs, filesপরিবর্তে আপনার ভেরিয়েবলের নামকরণের জন্য +1 r, d, f। আরও অনেক পাঠযোগ্য able
ক্লিমেট

27
নোট করুন যে এটি কেস সেনসিটিভ (টি। টিএক্সটি বা। টেক্সটের সাথে মেলে না), সুতরাং আপনি ফাইল.লুয়ার ()। এন্ডসইথ ('। টেক্সট') দিয়ে থাকলে সম্ভবত আপনি করতে চাইবেন:
জন

1
আপনার উত্তর সাব-ডিরেক্টরিতে ডিল করে।
স্যাম লিয়াও

117

এর মতো কিছু কাজ করবে:

>>> import os
>>> path = '/usr/share/cups/charmaps'
>>> text_files = [f for f in os.listdir(path) if f.endswith('.txt')]
>>> text_files
['euc-cn.txt', 'euc-jp.txt', 'euc-kr.txt', 'euc-tw.txt', ... 'windows-950.txt']

আমি কীভাবে টেক্সট_ফাইলেসের পথটি সংরক্ষণ করব? ['পাথ / ইউক-সিএন.টিএসটিেক্স', ... 'পথ / উইন্ডোজ -950.txt']
আইসকুইএন

5
আপনি os.path.joinপ্রতিটি উপাদান ব্যবহার করতে পারে text_files। এটি কিছু হতে পারে text_files = [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.txt')]
শেঠ

54

আপনি কেবল pathlibএস 1 ব্যবহার করতে পারেন :glob

import pathlib

list(pathlib.Path('your_directory').glob('*.txt'))

বা একটি লুপ:

for txt_file in pathlib.Path('your_directory').glob('*.txt'):
    # do something with "txt_file"

আপনি যদি এটি পুনরাবৃত্তি করতে চান তবে আপনি ব্যবহার করতে পারেন .glob('**/*.txt)


1pathlib মডিউল পাইথন 3.4 আদর্শ গ্রন্থাগার অন্তর্ভুক্ত করা হয়। তবে আপনি সেই মডিউলটির ব্যাক-পোর্টগুলি এমনকি পুরানো পাইথন সংস্করণে (যেমন ব্যবহার condaবা ব্যবহার করতে পারেন) ইনস্টল করতে পারেন pip: pathlibএবং pathlib2


**/*.txtপুরানো অজগর সংস্করণ দ্বারা সমর্থিত নয় o সুতরাং আমি foundfiles= subprocess.check_output("ls **/*.txt", shell=True) for foundfile in foundfiles.splitlines(): print foundfile
রোমান

1
@ রোমান হ্যাঁ, এটি কী pathlibকরতে পারে তা কেবল একটি প্রদর্শনী ছিল এবং আমি ইতিমধ্যে পাইথন সংস্করণ প্রয়োজনীয়তা অন্তর্ভুক্ত করেছি। :) তবে যদি আপনার দৃষ্টিভঙ্গি ইতিমধ্যে পোস্ট করা হয়নি তবে কেন এটি অন্য উত্তর হিসাবে যুক্ত করবেন না?
এমসিফার্ট

1
হ্যাঁ, একটি উত্তর পোস্ট করা আমাকে অবশ্যই আরও ভাল ফর্ম্যাটিংয়ের সম্ভাব্যতা দিত it আমি এটি সেখানে পোস্ট করেছি কারণ আমার কাছে মনে হয় এটি এটির জন্য আরও একটি অনুমোদিত জায়গা।
রোমান

5
দ্রষ্টব্য যে আপনি rglobপুনরাবৃত্তভাবে আইটেমগুলি সন্ধান করতে চাইলে আপনি এটিও ব্যবহার করতে পারেন। উদাহরণস্বরূপ.rglob('*.txt')
ব্রাম ভ্যানরোয়

40
import os

path = 'mypath/path' 
files = os.listdir(path)

files_txt = [i for i in files if i.endswith('.txt')]

29

আমি ওএসওয়াক () পছন্দ করি :

import os

for root, dirs, files in os.walk(dir):
    for f in files:
        if os.path.splitext(f)[1] == '.txt':
            fullpath = os.path.join(root, f)
            print(fullpath)

বা জেনারেটর সহ:

import os

fileiter = (os.path.join(root, f)
    for root, _, files in os.walk(dir)
    for f in files)
txtfileiter = (f for f in fileiter if os.path.splitext(f)[1] == '.txt')
for txt in txtfileiter:
    print(txt)

27

এখানে আরও কয়েকটি সংস্করণ রয়েছে যা কিছুটা আলাদা ফলাফল দেয়:

glob.iglob ()

import glob
for f in glob.iglob("/mydir/*/*.txt"): # generator, search immediate subdirectories 
    print f

glob.glob1 ()

print glob.glob1("/mydir", "*.tx?")  # literal_directory, basename_pattern

fnmatch.filter ()

import fnmatch, os
print fnmatch.filter(os.listdir("/mydir"), "*.tx?") # include dot-files

3
অদ্ভুত জন্য, glob1()একটি সাহায্যকারী ফাংশন globমডিউল যা পাইথন ডকুমেন্টেশনে তালিকাভুক্ত নয়। উত্স ফাইলে এটি কী করে তা বর্ণনা করার জন্য কিছু ইনলাইন মন্তব্য রয়েছে, দেখুন .../Lib/glob.py
মার্টিনিউ

1
@ মার্টিনিউ: glob.glob1()সর্বজনীন নয় তবে এটি পাইথন ২.৪-২..7; 3.0.3.2 এ উপলব্ধ; pypy; jython github.com/zed/test_glob1
jfs

1
ধন্যবাদ, মডিউলে একটি অননুমোদিত ব্যক্তিগত ফাংশন ব্যবহার করবেন কিনা তা সিদ্ধান্ত নেওয়ার সময় এটি অতিরিক্ত অতিরিক্ত তথ্য। ;-) এখানে আরও কিছু আছে। পাইথন ২.7 সংস্করণটি কেবল 12 লাইন দীর্ঘ এবং দেখে মনে হচ্ছে এটি globমডিউল থেকে সহজেই বের করা যেতে পারে ।
মার্টিনিউ

21

path.py অন্য বিকল্প: https://github.com/jaraco/path.py

from path import path
p = path('/path/to/the/directory')
for f in p.files(pattern='*.txt'):
    print f

দুর্দান্ত, এটি নিয়মিত অভিব্যক্তিটিকেও নিদর্শন হিসাবে গ্রহণ করে। আমি for f in p.walk(pattern='*.txt')প্রতিটি সাবফোল্ডারগুলি ব্যবহার করে যাচ্ছি
Kostanos

1
ইয়াও আছে পাথলিব। আপনি এর মতো কিছু করতে পারেন: list(p.glob('**/*.py'))
ব্যবহারকারীর 23233949

15

পাইথন v3.5 +

একটি recursive ফাংশনে os.scandir ব্যবহার করে দ্রুত পদ্ধতি। ফোল্ডার এবং সাব-ফোল্ডারগুলিতে একটি নির্দিষ্ট এক্সটেনশন সহ সমস্ত ফাইল অনুসন্ধান করে।

import os

def findFilesInFolder(path, pathList, extension, subFolders = True):
    """  Recursive function to find all files of an extension type in a folder (and optionally in all subfolders too)

    path:        Base directory to find files
    pathList:    A list that stores all paths
    extension:   File extension to find
    subFolders:  Bool.  If True, find files in all subfolders under path. If False, only searches files in the specified folder
    """

    try:   # Trapping a OSError:  File permissions problem I believe
        for entry in os.scandir(path):
            if entry.is_file() and entry.path.endswith(extension):
                pathList.append(entry.path)
            elif entry.is_dir() and subFolders:   # if its a directory, then repeat process as a nested function
                pathList = findFilesInFolder(entry.path, pathList, extension, subFolders)
    except OSError:
        print('Cannot access ' + path +'. Probably a permissions error')

    return pathList

dir_name = r'J:\myDirectory'
extension = ".txt"

pathList = []
pathList = findFilesInFolder(dir_name, pathList, extension, True)

এপ্রিল 2019 আপডেট করুন

আপনি যদি 10,000 টি ফাইল রয়েছে এমন ডিরেক্টরিগুলি অনুসন্ধান করে থাকেন তবে তালিকার সাথে যুক্ত করা অযোগ্য হয়ে যায়। ফলাফলগুলি 'ফলন' করা আরও ভাল সমাধান। আউটপুটটিকে একটি পান্ডাস ডেটাফ্রেমে রূপান্তর করতে আমি একটি ফাংশনও অন্তর্ভুক্ত করেছি।

import os
import re
import pandas as pd
import numpy as np


def findFilesInFolderYield(path,  extension, containsTxt='', subFolders = True, excludeText = ''):
    """  Recursive function to find all files of an extension type in a folder (and optionally in all subfolders too)

    path:               Base directory to find files
    extension:          File extension to find.  e.g. 'txt'.  Regular expression. Or  'ls\d' to match ls1, ls2, ls3 etc
    containsTxt:        List of Strings, only finds file if it contains this text.  Ignore if '' (or blank)
    subFolders:         Bool.  If True, find files in all subfolders under path. If False, only searches files in the specified folder
    excludeText:        Text string.  Ignore if ''. Will exclude if text string is in path.
    """
    if type(containsTxt) == str: # if a string and not in a list
        containsTxt = [containsTxt]

    myregexobj = re.compile('\.' + extension + '$')    # Makes sure the file extension is at the end and is preceded by a .

    try:   # Trapping a OSError or FileNotFoundError:  File permissions problem I believe
        for entry in os.scandir(path):
            if entry.is_file() and myregexobj.search(entry.path): # 

                bools = [True for txt in containsTxt if txt in entry.path and (excludeText == '' or excludeText not in entry.path)]

                if len(bools)== len(containsTxt):
                    yield entry.stat().st_size, entry.stat().st_atime_ns, entry.stat().st_mtime_ns, entry.stat().st_ctime_ns, entry.path

            elif entry.is_dir() and subFolders:   # if its a directory, then repeat process as a nested function
                yield from findFilesInFolderYield(entry.path,  extension, containsTxt, subFolders)
    except OSError as ose:
        print('Cannot access ' + path +'. Probably a permissions error ', ose)
    except FileNotFoundError as fnf:
        print(path +' not found ', fnf)

def findFilesInFolderYieldandGetDf(path,  extension, containsTxt, subFolders = True, excludeText = ''):
    """  Converts returned data from findFilesInFolderYield and creates and Pandas Dataframe.
    Recursive function to find all files of an extension type in a folder (and optionally in all subfolders too)

    path:               Base directory to find files
    extension:          File extension to find.  e.g. 'txt'.  Regular expression. Or  'ls\d' to match ls1, ls2, ls3 etc
    containsTxt:        List of Strings, only finds file if it contains this text.  Ignore if '' (or blank)
    subFolders:         Bool.  If True, find files in all subfolders under path. If False, only searches files in the specified folder
    excludeText:        Text string.  Ignore if ''. Will exclude if text string is in path.
    """

    fileSizes, accessTimes, modificationTimes, creationTimes , paths  = zip(*findFilesInFolderYield(path,  extension, containsTxt, subFolders))
    df = pd.DataFrame({
            'FLS_File_Size':fileSizes,
            'FLS_File_Access_Date':accessTimes,
            'FLS_File_Modification_Date':np.array(modificationTimes).astype('timedelta64[ns]'),
            'FLS_File_Creation_Date':creationTimes,
            'FLS_File_PathName':paths,
                  })

    df['FLS_File_Modification_Date'] = pd.to_datetime(df['FLS_File_Modification_Date'],infer_datetime_format=True)
    df['FLS_File_Creation_Date'] = pd.to_datetime(df['FLS_File_Creation_Date'],infer_datetime_format=True)
    df['FLS_File_Access_Date'] = pd.to_datetime(df['FLS_File_Access_Date'],infer_datetime_format=True)

    return df

ext =   'txt'  # regular expression 
containsTxt=[]
path = 'C:\myFolder'
df = findFilesInFolderYieldandGetDf(path,  ext, containsTxt, subFolders = True)

14

পাইথনের কাছে এটি করার জন্য সমস্ত সরঞ্জাম রয়েছে:

import os

the_dir = 'the_dir_that_want_to_search_in'
all_txt_files = filter(lambda x: x.endswith('.txt'), os.listdir(the_dir))

1
আপনি চাইলে all_txt_files এর তালিকা হতে পারেন:all_txt_files = list(filter(lambda x: x.endswith('.txt'), os.listdir(the_dir)))
এনা

12

পাইথোনিক উপায়ে তালিকা হিসাবে 'ডেটাপথ' ফোল্ডারের ভিতরে সমস্ত '.txt' ফাইলের নাম পেতে:

from os import listdir
from os.path import isfile, join
path = "/dataPath/"
onlyTxtFiles = [f for f in listdir(path) if isfile(join(path, f)) and  f.endswith(".txt")]
print onlyTxtFiles

12

এটি চেষ্টা করুন এটি আপনার সমস্ত ফাইল পুনরাবৃত্তভাবে খুঁজে পাবেন:

import glob, os
os.chdir("H:\\wallpaper")# use whatever directory you want

#double\\ no single \

for file in glob.glob("**/*.txt", recursive = True):
    print(file)

পুনরাবৃত্ত সংস্করণ দিয়ে নয় (ডাবল স্টার **:)। কেবল পাইথন 3 এ উপলব্ধ I আমি যা পছন্দ করি না তা chdirঅংশ। ওটার দরকার নেই.
জিন-ফ্রান্সোইস ফ্যাব্রে

2
ঠিক আছে, আপনি ওএস লাইব্রেরিটি পথে যোগ দিতে ব্যবহার করতে পারেন, উদাহরণস্বরূপ, filepath = os.path.join('wallpaper')এবং তারপরে এটি ব্যবহার করুন glob.glob(filepath+"**/*.psd", recursive = True), যা একই ফলাফল অর্জন করবে।
মিতালি রাও

8
import os
import sys 

if len(sys.argv)==2:
    print('no params')
    sys.exit(1)

dir = sys.argv[1]
mask= sys.argv[2]

files = os.listdir(dir); 

res = filter(lambda x: x.endswith(mask), files); 

print res

8

নির্দিষ্ট এক্সটেনশানযুক্ত ফাইলগুলির জন্য সম্পূর্ণ ফাইল পাথের একটি তালিকা পেতে কোনও ফোল্ডারের জন্য কোন সমাধানটি দ্রুত, কোন উপ-ডিরেক্টরি নয়, তা দেখার জন্য আমি একটি পরীক্ষা (পাইথন 3.6.4, ডাব্লু 7 এক্স 64) করেছি)

এটি সংক্ষিপ্ত করার জন্য, এই কাজটি os.listdir()দ্রুততম এবং পরের সেরা হিসাবে 1.7x দ্রুত: os.walk()(বিরতি দিয়ে!), 2.7x হিসাবে দ্রুত pathlib, 3.2x দ্রুত os.scandir()এবং 3.3x এর চেয়ে দ্রুত glob
দয়া করে মনে রাখবেন, যখন আপনার পুনরাবৃত্ত ফলাফলের প্রয়োজন হয় তখন সেই ফলাফলগুলি পরিবর্তন হবে। আপনি যদি নীচে একটি পদ্ধতি অনুলিপি / পেস্ট করেন তবে অনুগ্রহ করে একটি .ল্লোয়ার () যোগ করুন। .Xt অনুসন্ধানের সময় খুঁজে পাওয়া যাবে না।

import os
import pathlib
import timeit
import glob

def a():
    path = pathlib.Path().cwd()
    list_sqlite_files = [str(f) for f in path.glob("*.sqlite")]

def b(): 
    path = os.getcwd()
    list_sqlite_files = [f.path for f in os.scandir(path) if os.path.splitext(f)[1] == ".sqlite"]

def c():
    path = os.getcwd()
    list_sqlite_files = [os.path.join(path, f) for f in os.listdir(path) if f.endswith(".sqlite")]

def d():
    path = os.getcwd()
    os.chdir(path)
    list_sqlite_files = [os.path.join(path, f) for f in glob.glob("*.sqlite")]

def e():
    path = os.getcwd()
    list_sqlite_files = [os.path.join(path, f) for f in glob.glob1(str(path), "*.sqlite")]

def f():
    path = os.getcwd()
    list_sqlite_files = []
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith(".sqlite"):
                list_sqlite_files.append( os.path.join(root, file) )
        break



print(timeit.timeit(a, number=1000))
print(timeit.timeit(b, number=1000))
print(timeit.timeit(c, number=1000))
print(timeit.timeit(d, number=1000))
print(timeit.timeit(e, number=1000))
print(timeit.timeit(f, number=1000))

ফলাফল:

# Python 3.6.4
0.431
0.515
0.161
0.548
0.537
0.274

পাইথন ৩.6.৫ ডকুমেন্টেশনটিতে বলা হয়েছে: os.scandir () ফাংশনটি ফাইল অ্যাট্রিবিউটের তথ্য সহ ডিরেক্টরিতে এন্ট্রি প্রদান করে, অনেকগুলি সাধারণ ব্যবহারের ক্ষেত্রে [os.listdir () এর চেয়ে ভাল পারফরম্যান্স দেয়।
বিল ওল্ড্রয়েড

আমি এই পরীক্ষার স্কেলিংয়ের পরিমাণটি মিস করছি আপনি এই পরীক্ষায় কতগুলি ফাইল ব্যবহার করেছেন? আপনি সংখ্যাটি উপরে / নীচে স্কেল করলে তারা কীভাবে তুলনা করবেন?
N4ppeL

5

এই কোডটি আমার জীবনকে সহজ করে তোলে।

import os
fnames = ([file for root, dirs, files in os.walk(dir)
    for file in files
    if file.endswith('.txt') #or file.endswith('.png') or file.endswith('.pdf')
    ])
for fname in fnames: print(fname)


5

একই ডিরেক্টরিতে "ডেটা" নামে একটি ফোল্ডার থেকে ".txt" ফাইলের নামের একটি অ্যারে পেতে আমি সাধারণত কোডের এই সাধারণ লাইনটি ব্যবহার করি:

import os
fileNames = [fileName for fileName in os.listdir("data") if fileName.endswith(".txt")]

3

আমি আপনাকে এফএনমেচ এবং উপরের পদ্ধতিটি ব্যবহার করার পরামর্শ দিচ্ছি । এইভাবে আপনি নীচের যে কোনওটি খুঁজে পেতে পারেন:

  1. নাম। txt ;
  2. নাম। টিএক্সটি ;
  3. নাম। txt

import fnmatch
import os

    for file in os.listdir("/Users/Johnny/Desktop/MyTXTfolder"):
        if fnmatch.fnmatch(file.upper(), '*.TXT'):
            print(file)

3

এখানে একটি সঙ্গে extend()

types = ('*.jpg', '*.png')
images_list = []
for files in types:
    images_list.extend(glob.glob(os.path.join(path, files)))

.txt:) এর সাথে ব্যবহারের জন্য নয়
এফ্রেইতো

2

উপ-ডিরেক্টরি সহ কার্যকরী সমাধান:

from fnmatch import filter
from functools import partial
from itertools import chain
from os import path, walk

print(*chain(*(map(partial(path.join, root), filter(filenames, "*.txt")) for root, _, filenames in walk("mydir"))))

15
আপনি কি দীর্ঘ সময় ধরে এই কোডটি বজায় রাখতে চান?
সিমন ভিউজার

2

যদি ফোল্ডারে অনেকগুলি ফাইল থাকে বা মেমোরি একটি প্রতিবন্ধক হয় তবে জেনারেটরগুলি ব্যবহার করে বিবেচনা করুন:

def yield_files_with_extensions(folder_path, file_extension):
   for _, _, files in os.walk(folder_path):
       for file in files:
           if file.endswith(file_extension):
               yield file

বিকল্প একটি: Iterate

for f in yield_files_with_extensions('.', '.txt'): 
    print(f)

বিকল্প বি: সমস্ত পান

files = [f for f in yield_files_with_extensions('.', '.txt')]

2

ঘোস্টডগের মতো একটি অনুলিপি-পেষ্টযোগ্য সমাধান:

def get_all_filepaths(root_path, ext):
    """
    Search all files which have a given extension within root_path.

    This ignores the case of the extension and searches subdirectories, too.

    Parameters
    ----------
    root_path : str
    ext : str

    Returns
    -------
    list of str

    Examples
    --------
    >>> get_all_filepaths('/run', '.lock')
    ['/run/unattended-upgrades.lock',
     '/run/mlocate.daily.lock',
     '/run/xtables.lock',
     '/run/mysqld/mysqld.sock.lock',
     '/run/postgresql/.s.PGSQL.5432.lock',
     '/run/network/.ifstate.lock',
     '/run/lock/asound.state.lock']
    """
    import os
    all_files = []
    for root, dirs, files in os.walk(root_path):
        for filename in files:
            if filename.lower().endswith(ext):
                all_files.append(os.path.join(root, filename))
    return all_files

1

নির্দিষ্ট এক্সটেনশন সহ ফাইলগুলি খুঁজতে পাইথন ওএস মডিউলটি ব্যবহার করুন ।

সাধারণ উদাহরণটি এখানে:

import os

# This is the path where you want to search
path = r'd:'  

# this is extension you want to detect
extension = '.txt'   # this can be : .jpg  .png  .xls  .log .....

for root, dirs_list, files_list in os.walk(path):
    for file_name in files_list:
        if os.path.splitext(file_name)[-1] == extension:
            file_name_path = os.path.join(root, file_name)
            print file_name
            print file_name_path   # This is the full path of the filter file

0

অনেক ব্যবহারকারী উত্তর দিয়ে os.walkউত্তর দিয়েছেন, যার মধ্যে সমস্ত ফাইল রয়েছে তবে সমস্ত ডিরেক্টরি এবং উপ ডিরেক্টরি এবং তাদের ফাইল অন্তর্ভুক্ত রয়েছে।

import os


def files_in_dir(path, extension=''):
    """
       Generator: yields all of the files in <path> ending with
       <extension>

       \param   path       Absolute or relative path to inspect,
       \param   extension  [optional] Only yield files matching this,

       \yield              [filenames]
    """


    for _, dirs, files in os.walk(path):
        dirs[:] = []  # do not recurse directories.
        yield from [f for f in files if f.endswith(extension)]

# Example: print all the .py files in './python'
for filename in files_in_dir('./python', '*.py'):
    print("-", filename)

বা এমন একের জন্য যেখানে আপনার জেনারেটরের দরকার নেই:

path, ext = "./python", ext = ".py"
for _, _, dirfiles in os.walk(path):
    matches = (f for f in dirfiles if f.endswith(ext))
    break

for filename in matches:
    print("-", filename)

আপনি যদি অন্য কোনও কিছুর জন্য ম্যাচ ব্যবহার করতে চলেছেন তবে আপনি এটিকে জেনারেটর এক্সপ্রেশন না করে তালিকা তৈরি করতে চাইতে পারেন:

    matches = [f for f in dirfiles if f.endswith(ext)]

0

forলুপ ব্যবহার করে একটি সহজ পদ্ধতি :

import os

dir = ["e","x","e"]

p = os.listdir('E:')  #path

for n in range(len(p)):
   name = p[n]
   myfile = [name[-3],name[-2],name[-1]]  #for .txt
   if myfile == dir :
      print(name)
   else:
      print("nops")

যদিও এটি আরও সাধারণীকরণ করা যায়।


একটি এক্সটেনশন চেক করার খুব অযৌক্তিক উপায়। অনিরাপদও। নামটি খুব ছোট হলে কী হবে? এবং অক্ষরগুলির তালিকা ব্যবহার করে স্ট্রিং নয় কেন?
জিন-ফ্রান্সোইস ফ্যাব্রে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.