পাইথন ব্যবহার করে একটি ডিরেক্টরিতে উপস্থিত সমস্ত ফাইল কীভাবে অন্য ডিরেক্টরিতে অনুলিপি করতে হয়। আমার কাছে সোর্স পাথ এবং স্ট্রিং হিসাবে গন্তব্য পথ।
উত্তর:
আপনি ব্যবহার করতে পারেন os.listdir () সোর্স ডিরেক্টরির মধ্যে ফাইল পেতে, os.path.isfile () যদি তারা নিয়মিত ফাইল (* স্নো সিস্টেমে সিম্বলিক লিংক সহ) দেখতে, এবং shutil.copy কপি না।
নিম্নলিখিত কোডগুলি কেবল গন্তব্য ডিরেক্টরিতে উত্স ডিরেক্টরি থেকে নিয়মিত ফাইলগুলি অনুলিপি করে (আমি ধরে নিচ্ছি যে আপনি কোনও উপ-ডিরেক্টরি অনুলিপি করতে চান না)।
import os
import shutil
src_files = os.listdir(src)
for file_name in src_files:
full_file_name = os.path.join(src, file_name)
if os.path.isfile(full_file_name):
shutil.copy(full_file_name, dest)
dest
হয় তবে ডিরেক্টরিটির নাম। shutil.copy(src, dst)
"ফাইল বা ডিরেক্টরিতে ডিএসসি ফাইলটি এসআরসি-র অনুলিপি করে .... ডিস্টে কোনও ডিরেক্টরি নির্দিষ্ট করে থাকলে, এসআরসি থেকে বেস ফাইল নাম ব্যবহার করে ফাইলটি ডিএসটি-তে অনুলিপি করা হবে।"
for fn in os.listdir(src)
আপনি যদি পুরো গাছটি (সাবডির ইত্যাদি সহ) অনুলিপি করতে না চান তবে সমস্ত glob.glob("path/to/dir/*.*")
ফাইলের একটি তালিকা ব্যবহার করতে বা ব্যবহার shutil.copy
করতে , তালিকার উপর লুপ করুন এবং প্রতিটি ফাইল অনুলিপি করতে ব্যবহার করুন।
for filename in glob.glob(os.path.join(source_dir, '*.*')):
shutil.copy(filename, dest_dir)
পাইথন ডক্সে শুটিলটি দেখুন , বিশেষত কপিরাইট কমান্ড।
গন্তব্য ডিরেক্টরি ইতিমধ্যে বিদ্যমান থাকলে, চেষ্টা করুন:
shutil.copytree(source, destination, dirs_exist_ok=True)
dirs_exist_ok=True
বিকল্প।
def recursive_copy_files(source_path, destination_path, override=False):
"""
Recursive copies files from source to destination directory.
:param source_path: source directory
:param destination_path: destination directory
:param override if True all files will be overridden otherwise skip if file exist
:return: count of copied files
"""
files_count = 0
if not os.path.exists(destination_path):
os.mkdir(destination_path)
items = glob.glob(source_path + '/*')
for item in items:
if os.path.isdir(item):
path = os.path.join(destination_path, item.split('/')[-1])
files_count += recursive_copy_files(source_path=item, destination_path=path, override=override)
else:
file = os.path.join(destination_path, item.split('/')[-1])
if not os.path.exists(file) or override:
shutil.copyfile(item, file)
files_count += 1
return files_count
import os
import shutil
os.chdir('C:\\') #Make sure you add your source and destination path below
dir_src = ("C:\\foooo\\")
dir_dst = ("C:\\toooo\\")
for filename in os.listdir(dir_src):
if filename.endswith('.txt'):
shutil.copy( dir_src + filename, dir_dst)
print(filename)
এখানে একটি পুনরাবৃত্তির অনুলিপি ফাংশনের আরও একটি উদাহরণ যা আপনাকে একবারে ডিরেক্টরিগুলির (সাব-ডিরেক্টরি সহ) একটি ফাইল অনুলিপি করতে দেয় যা আমি এই সমস্যাটি সমাধান করার জন্য ব্যবহার করি।
import os
import shutil
def recursive_copy(src, dest):
"""
Copy each file from src dir to dest dir, including sub-directories.
"""
for item in os.listdir(src):
file_path = os.path.join(src, item)
# if item is a file, copy it
if os.path.isfile(file_path):
shutil.copy(file_path, dest)
# else if item is a folder, recurse
elif os.path.isdir(file_path):
new_dest = os.path.join(dest, item)
os.mkdir(new_dest)
recursive_copy(file_path, new_dest)
সম্পাদনা: আপনি যদি পারেন তবে অবশ্যই ব্যবহার করুন shutil.copytree(src, dest)
। এটির জন্য প্রয়োজন যে গন্তব্য ফোল্ডারটি ইতিমধ্যে উপস্থিত নেই। আপনার যদি কোনও বিদ্যমান ফোল্ডারে ফাইলগুলি অনুলিপি করতে হয় তবে উপরের পদ্ধতিটি ভালভাবে কাজ করে!