मैं कुछ कोड लिख रहा हूं जो फ़ाइल नाम के अंत में संख्या को बढ़ाता है जब तक कि यह किसी मौजूदा फ़ाइल को ओवरराइट नहीं कर लेता है। मैं कई फाइलें बना रहा हूं, सभी एक ही आधार फ़ाइल नाम के साथ लेकिन अलग-अलग एक्सटेंशन, जिनमें से कोई भी मैं ओवरराइट करना चाहता हूं।गतिशील रूप से एक बूलियन अभिव्यक्ति का निर्माण
अनुभवहीन संस्करण:
prefix = 'hello0'
while os.path.exists(prefix + '.abc') or os.path.exists(prefix + '.def') or os.path.exists(prefix + '.ghi'):
n = int(prefix[-1])
prefix = prefix[:-1] + str(n + 1) # I know this doesn't work when n reaches two digits; my full code involves a regular expression
हालत स्पष्ट रूप से बहुत लंबे और बदसूरत हो सकता है जब वहाँ एक्सटेंशन की एक जोड़ी की तुलना में अधिक हैं। मैंने इसे for
लूप में समझाया।
मेरे संस्करण:
prefix = 'hello0'
extensions = ('.abc', '.def', '.ghi') # there could be even more than this
condition = True
while condition:
condition = False
# if any of the paths still exist, set the condition back to True
for extension in extensions:
if os.path.exists(prefix + extension):
condition = True
n = int(prefix[-1])
prefix = prefix[:-1] + str(n + 1)
मैं अभी भी एक छोटा सा भद्दा होने के लिए इस लग रहा है: यह पूरी तरह से स्पष्ट क्या while
पाश वास्तव में परीक्षण कर रहा है नहीं है। क्या एक बूलियन अभिव्यक्ति गतिशील रूप से एक बूलियन मान सेट करना संभव है?
मुझे लगता है कि निम्नलिखित काम हो सकता है (मैं इसे परीक्षण नहीं किया, मैं सिर्फ इसे इस लिखते समय सोचा था!), लेकिन मुझे नहीं लगता कि मैं eval
का सहारा लेना होना चाहिए है:
prefix = 'hello0'
extensions = ('.abc', '.def', '.ghi')
test = 'False'
for extension in extensions:
test += " or os.path.exists(prefix + '" + extension + "')"
while eval(test):
n = int(prefix[-1])
prefix = prefix[:-1] + str(n + 1)
यह शॉर्ट-सर्किट मूल्यांकन भी करता है, जैसे कि 'या' अभिव्यक्तियों की एक स्ट्रिंग होगी। एक संबंधित 'सभी()' विधि भी है। –
"... एक महत्वपूर्ण भाषा सुविधा है जिसके बारे में मुझे सीखना है।" पर्याप्त तनाव नहीं कर सकते हैं। यदि आपको कोई समस्या है, तो समाधान * कहीं * है। –
'कोई भी' सही है, धन्यवाद। और मैं पूरी तरह से 'eval' के बारे में एक संकेत होने के बारे में सहमत हूं कि आपने भाषा के बारे में कुछ याद किया है! –