পাইথন ইন্ডেন্টেশন কীভাবে ঠিক করবেন


264

আমার কিছু পাইথন কোড রয়েছে যার সাথে বেমানান ইনডেন্টেশন রয়েছে। বিষয়টি আরও খারাপ করার জন্য অনেকগুলি ট্যাব এবং স্পেসের মিশ্রণ রয়েছে, এমনকি স্পেস ইনডেন্টেশনও সংরক্ষণ করা হয়নি।

কোডটি প্রত্যাশার মতো কাজ করে তবে এটি বজায় রাখা কঠিন।

কোডটি না ভেঙে আমি কীভাবে ইনডেন্টেশনটি ঠিক করতে পারি ( এইচটিএমএল পরিস্কারের মতো , তবে পাইথনের জন্য)?


তুমি কেমন reindent.py module-- ব্যবহার করার জন্য এই লিঙ্কে পর্যালোচনা করুন এবং আপনার ইনপুট প্রদান করতে পারেন stackoverflow.com/questions/12132481/installing-reindent-python/...
user1050619

@ অ্যান্ডে-হাইডেন নীচে উল্লিখিত হিসাবে এই সম্পর্কিত প্রশ্নটি দেখুন - মূলত autopep8ইনডেন্টেশন এবং আরও অনেক কিছু সরবরাহ করে: স্ট্যাকওভারফ্লো
পিয়েরেজ

2
এটি একটি অত্যন্ত কার্যকর প্রশ্ন, আমি নিজেকে প্রায়শই এটি করা প্রয়োজন বলে মনে করি। এটি "কোনও সরঞ্জামের সুপারিশ করার" বিষয়ে এতটা "এটি কীভাবে করবেন" নয়।
অ্যান্ডি হেডেন

উত্তর:


282

আপনার পাইথন ইনস্টলেশনের ডিরেক্টরিতে reindent.pyআপনি যে স্ক্রিপ্টটি সন্ধান করেন তা ব্যবহার করুন Tools/scripts/:

4-স্পেস ইনডেন্ট এবং কোনও হার্ড ট্যাব অক্ষর ব্যবহার করতে পাইথন (.py) ফাইলগুলি পরিবর্তন করুন। এছাড়াও লাইনের শেষ থেকে অতিরিক্ত স্থান এবং ট্যাবগুলি ছাঁটাই করুন এবং ফাইলগুলির শেষে খালি লাইনগুলি সরিয়ে দিন। একটি নতুন লাইন দিয়ে শেষ লাইনটি শেষ হয় তা নিশ্চিত করুন।

বিস্তারিত ব্যবহারের নির্দেশাবলীর জন্য সেই স্ক্রিপ্টটি একবার দেখুন।


51
দুর্ভাগ্যক্রমে, এটি ডেবিয়ান এবং উবুন্টুতে সাধারণ পাইথন ইনস্টলের অংশ নয়; এটি python-examplesপ্যাকেজ মধ্যে বিভক্ত ।
প্রাক্তন

16
অসাধারণ! সুতরাং ডেবিয়ান এবং উবুন্টু ব্যবহারকারীদের যা যা করা দরকার তা হ'ল সেই প্যাকেজটি গ্রহণ করা। বিকল্পভাবে, স্ক্রিপ্টটি svn.python.org/view/python/trunk/Tools/scriptts/… এও রয়েছে ।
অ্যালেক্স মার্টেলি

9
@ শায় এরলিচম্যান: "অজগর -tt thycript.py" চেষ্টা করুন
নসক্লো

8
ফেডোরা / রেডহ্যাট / সেন্টোস ব্যবহারকারীদের "পাইথন-সরঞ্জাম" প্যাকেজ ইনস্টল করা উচিত।
ক্রিশ্চিয়ান সিপিতু

26
খ্রিস্টপূর্বের মন্তব্যে যোগ করার জন্য: একবার python-examplesইনস্টল হয়ে গেলে আপনি পুনরায় ইনডেন্ট পাবেন /usr/share/doc/pythonX.X/examples/Tools/scripts/reindent.py
ল্যারি হেস্টিংস

59

আপনি যদি ভিম ব্যবহার করছেন তবে দেখুন :h retab

                                                        *: ret * *: retab *
: [রেঞ্জ] রেট [আবৃত্তি] [!] [নতুন_ট্যাবস্টপ]
                        একটিযুক্ত সাদা-স্থানের সমস্ত ক্রম প্রতিস্থাপন করুন
                        <ট্যাব> নতুনটি ব্যবহার করে সাদা-স্পেসের নতুন স্ট্রিং রয়েছে
                        ট্যাবস্টপ মান দেওয়া হয়েছে। আপনি যদি নতুন নির্দিষ্ট না করেন
                        ট্যাবস্টপ আকার বা এটি শূন্য, ভিম বর্তমান মানটি ব্যবহার করে
                        'ট্যাবস্টপ' এর
                        'ট্যাবস্টপ' এর বর্তমান মান সর্বদা অভ্যস্ত
                        বিদ্যমান ট্যাবগুলির প্রস্থ গণনা করুন।
                        সাথে!, ভিম কেবলমাত্র সাধারণ স্ট্রিংগুলি প্রতিস্থাপন করে
                        যেখানে উপযুক্ত সেখানে ট্যাব সহ ফাঁকা স্থান।
                        'প্রসারিত ট্যাব' চালু করে, ভিমে সমস্ত ট্যাব প্রতিস্থাপন করে
                        যথাযথ স্থান।
                        এই কমান্ডটি নতুন ট্যাবলেটে 'ট্যাবস্টপ' সেট করে,
                        এবং যদি পুরো ফাইলটিতে সম্পাদিত হয়, যা পূর্বনির্ধারিত হয়,
                        কোন দৃশ্যমান পরিবর্তন করা উচিত নয়।
                        যত্নশীল: এই কমান্ডটি কোনও <ট্যাব> অক্ষর সংশোধন করে
                        একটি সি প্রোগ্রাম স্ট্রিং ভিতরে। এড়াতে "\ t" ব্যবহার করুন
                        এটি (এটি যাইহোক একটি ভাল অভ্যাস)।
                        ": Retab!" স্থান দ্বারা একটি ক্রম পরিবর্তন হতে পারে
                        <ট্যাব> অক্ষর, যা মুদ্রণ করতে পারে একটি মুদ্রণ ()।
                        আমি ভি মধ্যে নেই}
                        | + Ex_extra | কখন পাওয়া যায় না বৈশিষ্ট্যটি অক্ষম করা ছিল
                        সংকলন সময়।

উদাহরণস্বরূপ, যদি আপনি কেবল টাইপ করেন

: Ret

আপনার সমস্ত ট্যাব স্পেসে প্রসারিত হবে।

আপনি চান করতে পারেন

: se এবং "এর জন্য শর্টহ্যান্ড: সেট এক্সটেনডট্যাব

কোনও নতুন লাইন আক্ষরিক ট্যাব ব্যবহার করবে না তা নিশ্চিত করার জন্য।


আপনি যদি ভিম ব্যবহার করছেন না,

পার্ল- i.bak -pe "s / \ t / '' x (8-পজ ()% 8) / যেমন" ফাইল.পি

ট্যাবগুলিকে স্পেস দিয়ে প্রতিস্থাপন করবে, ধরে নিলেই ট্যাব প্রতি 8 টি অক্ষর থামবে, ধরে নিবে file.py(কেবলমাত্র আসল ক্ষেত্রে যাবার সাথে file.py.bak)। যদি আপনার ট্যাব স্টপগুলি প্রতি 4 টি ফাঁকা জায়গায় থাকে তবে 8s কে 4s এর সাথে প্রতিস্থাপন করুন।


2
ভাল কাজ করেছেন। এটি ট্যাব ইন্ডেন্টেশন মিক্স-আপ ঠিক করার সবচেয়ে সহজ উপায়।
শ্রীকান্ত

নিশ্চিতভাবে সহজ উপায় না।
CONvid19

52

এটি করার জন্য আমি অটোপেইপ 8 এ পৌঁছে যাব :

$ # see what changes it would make
$ autopep8 path/to/file.py --select=E101,E121 --diff

$ # make these changes
$ autopep8 path/to/file.py --select=E101,E121 --in-place

দ্রষ্টব্য: E101 এবং E121 হ'ল পিপ 8 ইন্ডেন্টেশন (আমি মনে করি আপনি সহজেই --select=E1সমস্ত ইন্ডেন্টেশন সম্পর্কিত সমস্যাগুলি সমাধান করতে পারবেন - ই 1 দিয়ে শুরু হওয়া)।

পুনরাবৃত্তাকার পতাকা ব্যবহার করে আপনি এটি আপনার পুরো প্রকল্পে প্রয়োগ করতে পারেন:

$ autopep8 package_dir --recursive --select=E101,E121 --in-place

আরো দেখুন টুল PEP8 অনুবর্তী হতে পাইথন কোড রূপান্তর করতে


এটি দুর্দান্ত ... আমি পাইথনের জন্য রুবির রুবোকপের মতো একটি সরঞ্জাম খুঁজছিলাম
ওকেজিই

1
autopep8সিনট্যাক্সটি ভুল হলে ব্যর্থ হয়। আপনি তা নিশ্চিত করতে পারেনpython -tt <file.py>
নিশান্ত

47

autopep8 -i script.py

অটোপেপ 8 ব্যবহার করুন

autopep8 পাইথন কোডটি স্বয়ংক্রিয়ভাবেPEP 8 nullstyle গাইড অনুসারে ফর্ম্যাট করে । প্রয়োজনের কোন অংশটি বিন্যাস করতে হবে pep8তা নির্ধারণ করতে এটি ইউটিলিটিটি ব্যবহার করে nullcode। রিপোর্ট করা যেতে পারে যে autopep8বেশিরভাগ nullformattingসমস্যা সমাধানের জন্য সক্ষম pep8

pip install autopep8
autopep8 script.py    # print only
autopep8 -i script.py # write file

আমার কাছে "ইম্পোর্ট ওএস" এবং এর আগে 4 টি স্পেস সহ কেবল একটি লাইন কোড রয়েছে তবে এটি
যেটিতে অন্তর্ভুক্ত নয়

3
@pkm 4 টি স্পেস (বা যে কোনও ইন্ডেনেশন যা 4 এর একাধিক) PEP8
rbaleksandar

13

ভিম ব্যবহার করে, এটি আঘাতের চেয়ে বেশি জড়িত হওয়া উচিত নয় Esc, এবং তারপরে টাইপ করা ...

:%s/\t/    /g

... আপনি যে ফাইলটি পরিবর্তন করতে চান তাতে। এটি সমস্ত ট্যাবকে চারটি জায়গায় রূপান্তর করবে। আপনার যদি পাশাপাশি অসামঞ্জস্যপূর্ণ ব্যবধান থাকে তবে তা আরও কঠিন হবে।


11
আপনি কি মূল কোডার (গুলি) সন্ধান এবং উন্নত জিজ্ঞাসাবাদ কৌশল প্রয়োগ করতে পারেন? অসামঞ্জস্যযুক্ত ইনডেন্ট কোডের চেয়ে খারাপ আর কিছু নেই।
বেন হিউজেস


9

রয়েছে PythonTidy (যেহেতু আপনি এইচটিএমএল পরিপাটি মত বললেন)।

এটি ট্যাবগুলি পরিষ্কার করার চেয়ে আরও অনেক কিছু করতে পারে। আপনি যদি এই ধরণের জিনিস পছন্দ করেন তবে এটি একবার দেখার মতো।


5

বেশিরভাগ ইউনিক্স-মতো সিস্টেমে আপনি এগুলিও চালাতে পারেন:

expand -t4 oldfilename.py > newfilename.py

কমান্ড লাইন থেকে, যদি আপনি ট্যাবগুলিকে ৪ টি ব্যতীত আরও কয়েকটি স্পেস দিয়ে প্রতিস্থাপন করতে চান তবে নম্বরটি পরিবর্তন করতে পারেন, মূল ফাইলের নামগুলি ধরে রেখে আপনি একবারে খুব সহজেই শেল স্ক্রিপ্ট লিখতে পারেন files


1
নোট করুন যে একই ফাইলটি ব্যবহার করে কাজ করে না এবং আপনাকে খালি ফাইল দেয় তবে এই উত্তরটি আসলে কাজ করে এবং যখন আমার ট্যাবগুলিকে স্পেসে রূপান্তর করতে হয় তখন আমি এটি ব্যবহার করি। কেউ কি ডাউনটা বুঝাতে পারবে? আমি এটি +1 করব।
এস কের্ডেল

ওভাররাইট করা ফাইলটি পুনরুদ্ধার করার কোনও উপায় আছে কি? সবেমাত্র উপরোক্ত পদ্ধতিটি ব্যবহার করা হয়েছে এবং আমার দিনের মূল্যমান কোডটি বিলুপ্ত হওয়া ফেসপামটি । ধন্যবাদ
সিমাস

4

আপনি যদি অলস হন (আমার মতো) তবে আপনি উইংওয়্যার পাইথন আইডিইর একটি ট্রায়াল সংস্করণও ডাউনলোড করতে পারেন, এতে মেস আপ আপডেন্টেশনের জন্য একটি অটো-ফিক্স সরঞ্জাম রয়েছে। এটি বেশ ভাল কাজ করে। http://www.wingware.com/


4

কিছু অনুপস্থিত মডিউলের কারণে, রেন্ডেন্ডেন্ট স্ক্রিপ্টটি আমার পক্ষে কাজ করে না। যাইহোক, আমি এই sedআদেশটি পেয়েছি যা কাজটি আমার পক্ষে নিখুঁত করে:

sed -r 's/^([  ]*)([^ ])/\1\1\2/' file.py

2
অবৈধ বিকল্পসমূহ -
হ্যালো ওয়ার্ল্ড

2

ইমাকস ব্যবহার করে দেখুন। পাইথনে প্রয়োজনীয় ইনডেন্টেশনের জন্য এটির ভাল সমর্থন রয়েছে। দয়া করে এই লিঙ্কটি পরীক্ষা করুন http://python.about.com/b/2007/09/24/emacs-tips-for-python-programmers.htm


2
পাইথন-মোড পাইথন লেখার জন্য দুর্দান্ত, তবে লিঙ্কের কোনও কিছুই কীভাবে বিদ্যমান ফাইলে ইনডেন্টেশন ঠিক করবেন তা বর্ণনা করে না
মুহুর্তের

5
এমএক্স আনবিবিফাই ট্যাবগুলিকে ইম্যাক্সে মহাকাশে পরিণত করবে
পল হিলডেব্রান্ট

লিঙ্কটি (কার্যকরভাবে) নষ্ট হয়ে গেছে। এটি "নতুনদের জন্য সি প্রোগ্রামিং ল্যাঙ্গুয়েজ" (!) শিরোনাম সহ একটি পৃষ্ঠাতে পুনর্নির্দেশ করে ।
পিটার মর্টেনসেন


0

আমার এই সমস্যার সহজ সমাধান আছে have আপনি প্রথমে ": retab" এবং তারপরে ": retab!" টাইপ করতে পারেন, তবে সবকিছু ঠিকঠাক হবে


1
:retabকোন প্রসঙ্গে " " টাইপ করুন । ইন তেজ ?
পিটার মর্টেনসেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.