পাইথন ব্যবহার করে আমাকে একটি ডিরেক্টরিতে ফাইল সংখ্যা গণনা করতে হবে।
আমি অনুমান করি সবচেয়ে সহজ উপায় len(glob.glob('*'))
তবে এটি ডিরেক্টরিটিকে ফাইল হিসাবেও গণনা করে।
কোনও ডিরেক্টরিতে কেবল ফাইলগুলি গণনা করার কোনও উপায় আছে ?
পাইথন ব্যবহার করে আমাকে একটি ডিরেক্টরিতে ফাইল সংখ্যা গণনা করতে হবে।
আমি অনুমান করি সবচেয়ে সহজ উপায় len(glob.glob('*'))
তবে এটি ডিরেক্টরিটিকে ফাইল হিসাবেও গণনা করে।
কোনও ডিরেক্টরিতে কেবল ফাইলগুলি গণনা করার কোনও উপায় আছে ?
উত্তর:
os.listdir()
ব্যবহারের চেয়ে কিছুটা দক্ষ হবে glob.glob
। কোনও ফাইল নাম কোনও সাধারণ ফাইল (এবং ডিরেক্টরি বা অন্যান্য সত্তা নয়) তা পরীক্ষা করতে, ব্যবহার করুন os.path.isfile()
:
import os, os.path
# simple version for working with CWD
print len([name for name in os.listdir('.') if os.path.isfile(name)])
# path joining version for other paths
DIR = '/tmp'
print len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR, name))])
folder_path
অভ্যন্তরটি যুক্ত os.path.filename(name)
করতে ভুলবেন না। stackoverflow.com/questions/17893542/…
os.path.join(DIR, name)
ওভার ব্যবহার করে DIR + '/' + name
কী লাভ ? দ্বিতীয়টি সংক্ষিপ্ত এবং আইএমও, পূর্বের চেয়ে আরও স্পষ্ট। সম্ভবত কিছু ওএস আছে: এস এর উপরেরটি ব্যর্থ হবে?
import os
path, dirs, files = next(os.walk("/usr/lib"))
file_count = len(files)
সকল ধরণের ফাইলের জন্য, উপ-ডিরেক্টরি অন্তর্ভুক্ত:
import os
list = os.listdir(dir) # dir is your directory path
number_files = len(list)
print number_files
কেবলমাত্র ফাইল (সাব-ডিরেক্টরিগুলি এড়ানো):
import os
onlyfiles = next(os.walk(dir))[2] #dir is your directory path as string
print len(onlyfiles)
এখানেই fnmatch আসে খুব সহজে:
import fnmatch
print len(fnmatch.filter(os.listdir(dirpath), '*.txt'))
os.path.isfile()
স্বীকৃত উত্তরের মতো প্রতিটি ফাইলের পরীক্ষা করা । তুলনায় উল্লেখযোগ্যভাবে দ্রুত glob.glob()
।
আপনি যদি ডিরেক্টরিতে সমস্ত ফাইল গণনা করতে চান - উপ-ডিরেক্টরিতে ফাইল সহ, সর্বাধিক পাইথোনিক উপায়:
import os
file_count = sum(len(files) for _, _, files in os.walk(r'C:\Dropbox'))
print(file_count)
আমরা স্পষ্টভাবে ফাইলের সংখ্যার চেয়ে দ্রুতগতির সমষ্টিটি ব্যবহার করি (সময়গুলি মুলতুবি রয়েছে)
_
একটি for
লুপ ব্যবহার করতে পারি । os.walk
আমি জানি। তবে নিশ্চিত না যে sum
ফাংশনের অভ্যন্তরে আন্ডারস্কোরগুলি দিয়ে কী চলছে , আপনি দয়া করে বিস্তারিত বলতে পারেন। ধন্যবাদ!
import os
print len(os.listdir(os.getcwd()))
আমি অবাক হয়েছি যে কেউ উল্লেখ করেনি os.scandir
:
def count_files(dir):
return len([1 for x in list(os.scandir(dir)) if x.is_file()])
এটি os.listdir
কোনও ডিরেক্টরি ব্যবহার করে এবং কাজ করে:
import os
directory = 'mydirpath'
number_of_files = len([item for item in os.listdir(directory) if os.path.isfile(os.path.join(directory, item))])
এটি একটি জেনারেটরের সাহায্যে সরল করা যায় এবং এর সাথে কিছুটা দ্রুত তৈরি করা যায়:
import os
isfile = os.path.isfile
join = os.path.join
directory = 'mydirpath'
number_of_files = sum(1 for item in os.listdir(directory) if isfile(join(directory, item)))
def count_em(valid_path):
x = 0
for root, dirs, files in os.walk(valid_path):
for f in files:
x = x+1
print "There are", x, "files in this directory."
return x
এই পোস্ট থেকে নেওয়া হয়েছে
files
একটি তালিকা। 2. ওপি পুনরাবৃত্ত গণনা খুঁজছে না
এখানে আমি একটি সহজ এক-লাইন কমান্ডটি পেয়েছি যা আমি দরকারী বলে মনে করেছি:
print int(os.popen("ls | wc -l").read())
ls
করা সাধারণত: এটির উপর নজর রাখা হয় (এটি ঘন ঘন সমস্যার সৃষ্টি করতে পারে), যদিও এটি শেলের খুব খারাপ "দ্রুত এবং নোংরা" পদ্ধতি নয়। আপনার ব্যবহার করা উচিত ls -1
, তবে এটি প্রতি ফাইলের জন্য একটি লাইনের গ্যারান্টি দেয়।
যদিও আমি @ ড্যানিয়েল স্টুটজবাচের প্রদত্ত উত্তরের সাথে একমত: os.listdir()
ব্যবহার করার চেয়ে কিছুটা দক্ষ হবে glob.glob
।
তবে একটি অতিরিক্ত নির্ভুলতা, আপনি যদি ফোল্ডারে নির্দিষ্ট ফাইলগুলির সংখ্যা গণনা করতে চান তবে আপনি ব্যবহার করতে চান len(glob.glob())
। উদাহরণস্বরূপ আপনি যদি কোনও ফোল্ডারে যে সমস্ত পিডিএফ ব্যবহার করতে চান তা গণনা করতে হয়:
pdfCounter = len(glob.glob1(myPath,"*.pdf"))
এটা সহজ:
print(len([iq for iq in os.scandir('PATH')]))
এটি কেবল ডিরেক্টরিতে ফাইলগুলির সংখ্যা গণনা করে, আমি সমস্ত ফাইলকে প্রত্যাবর্তন করে নির্দিষ্ট ডিরেক্টরি দিয়ে পুনরাবৃত্তি করতে তালিকা বোঝার কৌশলটি ব্যবহার করেছি। "লেন (প্রত্যাবর্তিত তালিকা)" ফাইলের সংখ্যা দেয়।
import os
total_con=os.listdir('<directory path>')
files=[]
for f_n in total_con:
if os.path.isfile(f_n):
files.append(f_n)
print len(files)
আপনি যদি অপারেটিং সিস্টেমের মানক শেলটি ব্যবহার করেন তবে খাঁটি পাইথোনিক উপায় ব্যবহার না করে আপনি ফলাফলটি আরও দ্রুত পেতে পারেন।
উইন্ডোজ জন্য উদাহরণ:
import os
import subprocess
def get_num_files(path):
cmd = 'DIR \"%s\" /A-D /B /S | FIND /C /V ""' % path
return int(subprocess.check_output(cmd, shell=True))
আমি glob.iglob
অনুরূপ ডিরেক্টরি কাঠামোর জন্য ব্যবহার করেছি
data
└───train
│ └───subfolder1
│ | │ file111.png
│ | │ file112.png
│ | │ ...
│ |
│ └───subfolder2
│ │ file121.png
│ │ file122.png
│ │ ...
└───test
│ file221.png
│ file222.png
নিম্নলিখিত উভয় বিকল্প 4 টি প্রত্যাবর্তন করে (প্রত্যাশারূপে, যেমন সাবফোল্ডারগুলি তাদের গণনা করে না )
len(list(glob.iglob("data/train/*/*.png", recursive=True)))
sum(1 for i in glob.iglob("data/train/*/*.png"))
আমি এটি করেছি এবং এটি ফোল্ডারে (অ্যাটাক_ডাটা) ফাইল সংখ্যা ফিরিয়ে দিয়েছে ... এটি দুর্দান্ত কাজ করে।
import os
def fcount(path):
#Counts the number of files in a directory
count = 0
for f in os.listdir(path):
if os.path.isfile(os.path.join(path, f)):
count += 1
return count
path = r"C:\Users\EE EKORO\Desktop\Attack_Data" #Read files in folder
print (fcount(path))