পাইথন ব্যবহার করে কোনও ফাইলের নাম কীভাবে পরিবর্তন করা যায়


উত্তর:


578

ব্যবহার os.rename:

import os

os.rename('a.txt', 'b.kml')

52
লক্ষ করা উচিত যে ফাইলগুলি যদি ডিরেক্টরি ডিরেক্টরিতে না থাকে তবে আপনার পুরো পথের প্রয়োজন হবে।
এন্ডারম্যানএপিএম

সত্যিই, 3.7 উবুন্টু উপর, আমাকে আপেক্ষিক পাথ ব্যবহার করার জন্য কাজ করে
toing_toing

2
@toing_toing অবশ্যই এটি কাজ করে, তার সম্ভবত সম্ভবত আপনি বর্তমান ডিরেক্টরি সম্পর্কে সচেতন হওয়া উচিত, এবং হয় এর সাথে সম্পর্কিত পথ নির্দিষ্ট করুন, বা কেবল পরম পথটি ব্যবহার করুন (যেমন C:/folder/file.txtউইন্ডোজ বা /home/file.txtলিনাক্স / ম্যাকোএসে)।
অ্যালেক্স পি

এটি লক্ষণীয় যে এটি ইউনিক্স-মতো সিস্টেমে নিঃশব্দে ফাইলগুলি ওভাররাইট করে তবে OSErrorউইন্ডোজ সিস্টেমে ব্যর্থ হয় । os.path.existsপুনরায় নামকরণের আগে লক্ষ্যটি বিদ্যমান কিনা তা পরীক্ষা করতে ব্যবহার করা উচিত। এটি "ব্যবহারের সময় প্রতি পরীক্ষার সময়" বাগ তৈরি করে তবে এটি সমস্যার কারণ হওয়ার সম্ভাবনা কম। (আমি এই সমস্যা এড়ানোর কোন সহজ উপায় জানি - দেখুন এখানে
AnnanFay

2
ব্যবহারকারী যদি প্রকৃতপক্ষে কোনও অপারেটিং সিস্টেমে ফাইলটি প্রতিস্থাপন করতে চান, তবে একটির ব্যবহার করা উচিতos.replace
লুকজি

71

ফাইলটি কোনও ডিরেক্টরিতে থাকতে পারে, সেই ক্ষেত্রে পথটি নির্দিষ্ট করে:

import os
old_file = os.path.join("directory", "a.txt")
new_file = os.path.join("directory", "b.kml")
os.rename(old_file, new_file)

48
import shutil

shutil.move('a.txt', 'b.kml')

এটি কোনও ফাইলের নাম পরিবর্তন বা স্থানান্তরিত করতে কাজ করবে।


31
shutil.moveপারমাণবিক অপারেশন না হওয়ার কারণে এটি কোনও ভাল বিকল্প নয়। উদাহরণস্বরূপ, ফাইলটি যদি খোলা থাকে তবে এটি shutil.moveএকটি ফাইল তৈরি করবে new_name, তবে আপনাকে old_nameদুটি ফাইল দিয়ে রেখে ফাইলটি মুছবে না । os.renameঅন্যদিকে কিছুই করবে না, এটি একটি ভাল বিকল্প । এর সাথে shutil.move, এমনকি যদি আপনি ত্রুটিটি ধরে ফেলেছিলেন তবে আপনার এখনও দুর্বৃত্ত ফাইলটি পরীক্ষা করা এবং মুছে ফেলার বিষয়ে চিন্তা করতে হবে। শুধু এটি অধিকারী না যখন একটি উন্নততর টুল বিদ্যমান: os.rename
mvbentes

34

পাইথন ৩.৪ অনুসারে এটি সমাধানের জন্য প্যাথলিব মডিউলটি ব্যবহার করতে পারেন ।

আপনি যদি পুরানো সংস্করণে থেকে থাকেন তবে আপনি এখানে পাওয়া ব্যাকপোর্ট করা সংস্করণটি ব্যবহার করতে পারেন

ধরে নেওয়া যাক আপনি মূল পথে নেই (কেবলমাত্র এতে কিছুটা অসুবিধা যুক্ত করার জন্য) আপনি নাম পরিবর্তন করতে চান এবং একটি পুরো পথ সরবরাহ করতে হবে, আমরা এটি দেখতে পারি:

some_path = 'a/b/c/the_file.extension'

সুতরাং, আপনি আপনার পথ নিতে এবং Pathএটি থেকে একটি অবজেক্ট তৈরি করতে পারেন :

from pathlib import Path
p = Path(some_path)

আমাদের কাছে এখন এই অবজেক্টটি সম্পর্কে কিছু তথ্য সরবরাহ করার জন্য, আমরা এগুলি থেকে জিনিসগুলি বের করতে পারি। উদাহরণস্বরূপ, যদি কোন কারনের জন্য আমরা থেকে ফাইলের নাম পরিবর্তন করে ফাইলের নাম পরিবর্তন করতে চান the_fileকরতে the_file_1, তাহলে আমরা ফাইলের নাম অংশ পেতে পারেন:

name_without_extension = p.stem

এবং এখনও হাতে এক্সটেনশনটি ধরে রাখুন:

ext = p.suffix

আমরা একটি সাধারণ স্ট্রিং ম্যানিপুলেশন দিয়ে আমাদের পরিবর্তনটি সম্পাদন করতে পারি:

পাইথন ৩.6 এবং এর চেয়ে বড় এফ স্ট্রিং ব্যবহার করুন!

new_file_name = f"{name_without_extension}_1"

অন্যথায়:

new_file_name = "{}_{}".format(name_without_extension, 1)

এবং এখন আমরা আমাদের renameতৈরি পথ অবজেক্টটিতে পদ্ধতিটি কল করে এবং extআমাদের চাইলে পুনরায় নামকরণ কাঠামোটি সম্পূর্ণ করতে সংযোজন করে আমাদের নামটি সম্পাদন করতে পারি:

p.rename(Path(p.parent, new_file_name + ext))

আরও শীঘ্রই এর সরলতা প্রদর্শন করতে:

পাইথন ৩.6++:

from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))

পাইথন ৩.6 এর চেয়ে কম সংস্করণগুলি তার পরিবর্তে স্ট্রিং বিন্যাস পদ্ধতি ব্যবহার করে:

from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))

3
আপনি কেন গৃহীত উত্তরের পরিবর্তে এটি করবেন? আরও জটিল বলে মনে হচ্ছে
rbennell

19
ঠিক আছে @ আরবেনেল, এই উত্তরটির বেশিরভাগটিই একটি ব্যাখ্যা। উত্তরটি আসলে তিনটি লাইনের শেষে রয়েছে। তদ্ব্যতীত, স্বীকৃত উত্তরটি খুব নাম পরিবর্তনের জন্য স্পষ্টভাবে তৈরি করা হয়। এই উত্তরটি দেখানোর একটি উপায় প্রদান করে আপনি কীভাবে ফাইলের নাম বা ফাইলের যে অংশগুলি চান সেগুলি সংরক্ষণ করতে ফাইল নামটি পরিচালনা করতে পারেন। তদ্ব্যতীত,pathlib পাঠাগারটি পাইথন ৩.৪ এ প্রবর্তিত হয়েছে সুতরাং উত্তরটি ভাগ করে নেওয়া আরও জটিল প্রয়োজনীয়তার জন্য তার বহুমুখিতা এবং ব্যবহারের প্রদর্শন করার জন্য একটি শক্ত মডিউলটির জন্য এক্সপোজার সরবরাহ করে।
idjaw

4
আপনাকে ধন্যবাদ @ আইডজও, আপনার মন্তব্যটি আমাদের নতুনদের প্রাথমিক প্রশ্নের উত্তরের উত্তর, একটি সাধারণ আপনি কেন তা করলেন? । এছাড়াও, ইন্টারনেটে যে-বিষয়টিকে প্রায়শই অজানা হিসাবে বিবেচনা করা হয় সেহেতু প্রতিকূলতা অবলম্বন করা দেখে তা সতেজ হয়।
ইগর ভি।

3
@ সাশুকেউচিহ - {}স্ট্রিং ফর্ম্যাটিংয়ের জন্য যা আপনি এখানে পড়তে পারেন । শেষ পর্যন্ত, যা ঘটছে তা হল পদ্ধতিতে {}পাস হওয়া ভেরিয়েবলগুলির সাথে প্রতিস্থাপন করা format। সুতরাং প্রথম {}রাখা হবে কি হয় name_without_extension, এবং দ্বিতীয় দ্বিতীয় যুক্তি যা কেবল হয় রাখা হবে 1
idjaw

3
এফ-স্ট্রিংগুলি ব্যবহার করে এটি আরও বেশি সরল করে। pathlib আমদানি পথ পি থেকে = পথ (some_path) সংস্করণ = 1 p.rename (পথ (p.parent, চ "{p.stem}: _ {সংস্করণ}" + + p.suffix))
Liquidgenius


8

ব্যবহার os.rename। তবে আপনাকে উভয় ফাইলের পুরো পথটি ফাংশনে যেতে হবে। a.txtআমার ডেস্কটপে যদি আমার কাছে একটি ফাইল থাকে তবে আমি করব এবং নাম পরিবর্তন করা ফাইলটিও আমাকে পুরো দিতে হবে।

 os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')

1
"হ্যাভ টু" সত্য নয়। আপনি সর্বদা একটি নিখুঁত ফাইলের নামের জন্য একটি সম্পর্কিত ফাইলের নাম এবং তার বিপরীতে স্থান পরিবর্তন করতে পারেন। সাধারণত প্রাথমিকভাবে যেগুলি কামড়ায় তা হ'ল তারা বোঝেন না যে বর্তমান ফাইলের ডিরেক্টরিগুলির সাথে সম্পর্কিত ফাইলের নামগুলি কীভাবে সম্পর্কিত।
ট্রিপলি

3
import os

# Set the path
path = 'a\\b\\c'  
# save current working directory
saved_cwd = os.getcwd()
# change your cwd to the directory which contains files
os.chdir(path)
os.rename('a.txt', 'b.klm')
# moving back to the directory you were in 
os.chdir(saved_cwd)

1
এইভাবে এটি থেকে সতর্ক থাকুন। আপনি সবসময় chdir()কোনও ডিরেক্টরিতে যেতে পারবেন না , যেমন উইন্ডোজ যখন ইউএনসি হয় তখন কী ঘটে? এবং একটি chdir()পার্শ্ব প্রতিক্রিয়া আছে। আমি বরং os.rename()সরাসরি কোনও পাথের জন্য প্রয়োজনীয় পাথগুলি নির্দিষ্ট করতে চাই chdir()
জোনব্রেভ

0

টাস্কলটি সম্পাদন করতে আপনি ওএস.সিস্টেম ব্যবহার করতে পারেন:

os.system('mv oldfile newfile')

হ্যাঁ, এটি কেবল একটি ইউনিক্স-ভিত্তিক মেশিনে কাজ করবে যেমন mvকোনও ফাইল সরানো / নামকরণের জন্য ইউনিক্স বিল্টিন কমান্ডলাইন প্রোগ্রাম।
মিখাইল গিয়ের

8
অজগর থেকে মাল্টি প্ল্যাটফর্মের উপায়ে করতে পারলে আপনি কেন একটি টার্মিনাল চালু করবেন এবং ইউনিক্সের কেবলমাত্র আদেশটি সংজ্ঞায়িত করবেন?
এন্ডারম্যানএপিএম

0
import os
import re
from pathlib import Path

for f in os.listdir(training_data_dir2):
  for file in os.listdir( training_data_dir2 + '/' + f):
    oldfile= Path(training_data_dir2 + '/' + f + '/' + file)
    newfile = Path(training_data_dir2 + '/' + f + '/' + file[49:])
    p=oldfile
    p.rename(newfile)

1
পথ বিভাজক হিসেবে ফরোয়ার্ড স্ল্যাশ হার্ড-কোডিং এবং পুরানো ধাঁচের মিশ os.pathআধুনিক সঙ্গে pathlibবেশ iffy হয়। pathlibপরিবর্তে সমস্ত পথে যান ।
ট্রিপলি

0
import shutil
import os

files = os.listdir("./pics/") 

for key in range(0, len(files)):
   print files[key]
   shutil.move("./pics/" + files[key],"./pics/img" + str(key) + ".jpeg")

এটি করা উচিত। অজগর 3+


... অথবা কিছুটা বেশি পঠনযোগ্য সংস্করণের জন্য গণনা ব্যবহার করুন: কীটির জন্য, নাম গণিতে (ফাইলগুলি):…
নিকোলাস ডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.