पायथन इंडेंटेशन को कैसे ठीक करें


264

मेरे पास कुछ पायथन कोड हैं जिनमें असंगत इंडेंटेशन है। मामले को और भी बदतर बनाने के लिए टैब और रिक्त स्थान का बहुत मिश्रण है, और यहां तक ​​कि अंतरिक्ष इंडेंटेशन भी संरक्षित नहीं है।

कोड अपेक्षित रूप से काम करता है, लेकिन इसे बनाए रखना मुश्किल है।

मैं कोड को तोड़े बिना इंडेंटेशन ( HTML Tidy की तरह , लेकिन पायथन के लिए) कैसे ठीक कर सकता हूं ?


क्या आप इस लिंक की समीक्षा कर सकते हैं और reindent.py मॉड्यूल-- stackoverflow.com/questions/12132481/installing-reindent-python/…
user1050619

जैसा कि नीचे उल्लेख किया गया है @ -y-hayden इस संबंधित प्रश्न को देखें - मूल रूप से autopep8इंडेंटेशन और बहुत कुछ प्रदान करता है: stackoverflow.com/questions/14328406/…
Pierz

2
यह एक बहुत ही उपयोगी प्रश्न है, मुझे लगता है कि मुझे ऐसा करने की आवश्यकता है। यह "एक उपकरण की सिफारिश करने" के बारे में नहीं है, इसलिए "इसे कैसे करना है"।
एंडी हेडन

जवाबों:


282

उस reindent.pyस्क्रिप्ट का उपयोग करें जो आपको Tools/scripts/अपने पायथन इंस्टॉलेशन की निर्देशिका में मिलती है :

4-स्थान इंडेंट और कोई हार्ड टैब वर्ण का उपयोग करने के लिए पायथन (.py) फ़ाइलों को बदलें। लाइनों के सिरों से अतिरिक्त रिक्त स्थान और टैब ट्रिम करें, और फ़ाइलों के अंत में खाली लाइनें हटा दें। यह भी सुनिश्चित करें कि अंतिम पंक्ति एक नई रेखा के साथ समाप्त होती है।

विस्तृत उपयोग निर्देशों के लिए उस स्क्रिप्ट पर एक नज़र डालें।


51
दुर्भाग्य से, यह डेबियन और उबंटू पर स्थापित सामान्य पायथन का हिस्सा नहीं है; यह python-examplesपैकेज में विभाजित है ।
20

16
अति उत्कृष्ट! तो डेबियन और उबंटू उपयोगकर्ताओं को जो कुछ भी करने की जरूरत है, वह है उस पैकेज को प्राप्त करना। वैकल्पिक रूप से, स्क्रिप्ट svn.python.org/view/python/trunk/Tools/scripts/… पर भी है ।
एलेक्स मार्टेली

9
@ सहाय एर्लिचमेन: "पायथन
लेट

8
फेडोरा / रेडहैट / सेंटोस उपयोगकर्ताओं को "पायथन-टूल्स" पैकेज स्थापित करना चाहिए।
क्रिस्टियन सियुपिटु

26
केवल इफेमिएंट की टिप्पणी में जोड़ने के लिए: एक बार python-examplesस्थापित हो जाने के बाद, आप इसमें रीइंडेंट पाएंगे /usr/share/doc/pythonX.X/examples/Tools/scripts/reindent.py
लैरी हेस्टिंग्स

59

यदि आप विम का उपयोग कर रहे हैं , तो देखें :h retab

                                                        *: रिट * *: रेटाब *
[सीमा] रिट [एब] [!] [new_tabstop]
                        व्हाइट-स्पेस वाले सभी दृश्यों को बदलें
                        <टैब> नए का उपयोग करके सफेद-स्थान के नए तारों के साथ
                        tabstop मान दिया गया। यदि आप एक नया निर्दिष्ट नहीं करते हैं
                        टैबस्टॉप आकार या यह शून्य है, विम वर्तमान मूल्य का उपयोग करता है
                        'टैबस्टॉप' का।
                        'Tabstop' का वर्तमान मान हमेशा उपयोग किया जाता है
                        मौजूदा टैब की चौड़ाई की गणना करें।
                        इसके साथ, विम भी केवल सामान्य के तारों को बदल देता है
                        जहाँ उपयुक्त हो टैब के साथ रिक्त स्थान।
                        'एक्सपर्टटैब' के साथ, विम सभी टैब को बदल देता है
                        रिक्त स्थान की उचित संख्या।
                        यह कमांड दिए गए नए मूल्य के लिए 'tabstop' सेट करता है,
                        और अगर पूरी फाइल पर प्रदर्शन किया है, जो कि डिफ़ॉल्ट है,
                        कोई दृश्य परिवर्तन नहीं करना चाहिए।
                        सावधान: यह कमांड किसी भी <Tab> अक्षर को संशोधित करता है
                        एक सी कार्यक्रम में तार के अंदर। बचने के लिए "t" का उपयोग करें
                        यह (वैसे भी यह एक अच्छी आदत है)।
                        ": Retab!" रिक्त स्थान के क्रम को भी बदल सकते हैं
                        <टैब> वर्ण, जो एक प्रिंटफ़ () को गड़बड़ कर सकता है।
                        {वि में नहीं}
                        जब उपलब्ध नहीं है | + ex_extra | सुविधा को अक्षम कर दिया गया था
                        संकलन समय।

उदाहरण के लिए, यदि आप बस टाइप करते हैं

: सेवानिवृत्त

आपके सभी टैब रिक्त स्थान में विस्तारित हो जाएंगे।

आप चाहे तो

: se et "आशुलिपि के लिए: सेट विस्तारक

यह सुनिश्चित करने के लिए कि कोई भी नई लाइन शाब्दिक टैब का उपयोग नहीं करेगी।


यदि आप विम का उपयोग नहीं कर रहे हैं,

perl -i.bak -pe "s / \ t / '' x (8-pos ()% 8) / उदा" file.py

टैब को स्थान से बदल देगा, मान लें कि टैब प्रत्येक 8 वर्णों को रोकता है, file.py(मूल file.py.bakस्थिति में, बस मामले में)। यदि आपकी टैब रुकती है तो इसके स्थान पर 8s को 4s से बदलें।


2
अच्छा काम किए। टैब इंडेंटेशन मिक्स-अप को ठीक करने का यह सबसे आसान तरीका है।
श्रीकांत

निश्चित रूप से सबसे आसान तरीका नहीं है।
CONvid19

52

मैं ऐसा करने के लिए autopep8 तक पहुंचूंगा :

$ # 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 pep8 इंडेंटेशन हैं (मुझे लगता है कि आप --select=E1सभी इंडेंटेशन संबंधित मुद्दों को ठीक करने के लिए पास कर सकते हैं - जो ई 1 से शुरू होते हैं)।

आप पुनरावर्ती ध्वज का उपयोग करके इसे अपनी संपूर्ण परियोजना पर लागू कर सकते हैं:

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

PyPon कोड को PEP8 के अनुरूप बनाने के लिए टूल भी देखें ।


यह बहुत बढ़िया है ... मैं अजगर के लिए रूबी की तरह एक उपकरण की तलाश कर रहा हूँ
OkezieE

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
क्या आप मूल कोडर को ट्रैक कर सकते हैं और बढ़ी हुई पूछताछ तकनीक को लागू कर सकते हैं? असंगत रूप से इंडेंटेड कोड से बदतर कुछ भी नहीं है।
बेन ह्यूजेस

3
@ फिर भी उस आदमी से हमारी समस्याओं के बारे में असंगत संकेत कम है :)
Shay Erlichmen

9

PythonTidy भी है (जब से आपने HTML Tidy पसंद किया है)।

हालांकि यह टैब को साफ करने के अलावा और भी बहुत कुछ कर सकता है। यदि आप उस प्रकार की चीज पसंद करते हैं, तो यह देखने लायक है।


5

अधिकांश UNIX- जैसी प्रणालियों पर, आप भी चला सकते हैं:

expand -t4 oldfilename.py > newfilename.py

कमांड लाइन से, संख्या को बदलना अगर आप टैब को 4 के अलावा कई जगहों से बदलना चाहते हैं। आप मूल फ़ाइल नामों को बनाए रखते हुए एक बार में फ़ाइलों का एक गुच्छा के साथ ऐसा करने के लिए एक शेल स्क्रिप्ट लिख सकते हैं।


1
ध्यान दें कि एक ही फ़ाइल का उपयोग करने से काम नहीं होता है और एक खाली फ़ाइल के साथ आपको छोड़ देता है, लेकिन यह उत्तर वास्तव में काम करता है और मैं इसका उपयोग तब करता हूं जब मुझे अपने टैब को रिक्त स्थान में बदलने की आवश्यकता होती है। किसी को भी downvote समझा सकता है? मैं इसे +1 करूंगा।
एस। केर्डल

क्या ओवर राइट की गई फ़ाइल को पुनर्प्राप्त करने का कोई संभावित तरीका है? बस ऊपर विधि का इस्तेमाल किया और कोड के अपने दिन का गायब हो गई facepalm । धन्यवाद
Simas

4

यदि आप आलसी हैं (मेरी तरह), तो आप विंगवेयर पायथन आईडीई का एक परीक्षण संस्करण भी डाउनलोड कर सकते हैं, जिसमें गड़बड़ इंडेंटेशन के लिए एक ऑटो-फिक्स टूल है। यह बहुत अच्छी तरह से काम करता है। http://www.wingware.com/


4

कुछ अनुपलब्ध मॉड्यूल के कारण, मेरे लिए स्क्रिप्ट पर काम नहीं हुआ। वैसे भी, मुझे यह sedआदेश मिला जो मेरे लिए काम को सही करता है:

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

2
अवैध विकल्प -r।
हेलोवर्ल्ड

2

Emacs की कोशिश करो। इसे पायथन में आवश्यक इंडेंटेशन के लिए अच्छा समर्थन है। कृपया इस लिंक की जाँच करें http://python.about.com/b/2007/09/24/emacs-tips-for-python-programmers.htm


2
अजगर लिखने के लिए अजगर-मोड अच्छा है, लेकिन लिंक पर कुछ भी नहीं बताता है कि मौजूदा फ़ाइल में इंडेंटेशन को कैसे ठीक किया जाए ।
20

5
एमएक्स अप्रतिबंधित टैब को एमएसीएस में अंतरिक्ष में बदल देगा
पॉल हिल्डेब्रांड्ट

लिंक (प्रभावी रूप से) टूटा हुआ है। यह "सी प्रोग्रामिंग लैंग्वेज फॉर बिगिनर्स" (!) शीर्षक के साथ एक पृष्ठ पर रीडायरेक्ट करता है ।
पीटर मोर्टेंसन


0

मेरे पास इस समस्या का एक सरल समाधान है। आप पहले ": रेटब" और फिर ": रिटैब!" टाइप कर सकते हैं, फिर सबकुछ ठीक हो जाएगा


1
:retabकिस संदर्भ में " " टाइप करें । में विम ?
पीटर मोर्टेंसन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.