मेरे पास एक रूट-आईएसएच निर्देशिका है जिसमें एकाधिक उपनिर्देशिकाएं हैं, जिनमें से सभी में फ़ाइल नाम data.txt है। मैं जो करना चाहता हूं वह एक स्क्रिप्ट लिखना है जो "रूट" निर्देशिका में लेता है, और उसके बाद सभी उपनिर्देशिकाओं के माध्यम से पढ़ता है और उपनिर्देशिका में प्रत्येक "data.txt" पढ़ता है, और फिर प्रत्येक डेटा.txt फ़ाइल से सामान लिखता है एक आउटपुट फाइल।सभी उपनिर्देशिकाओं के माध्यम से बार-बार कैसे जाते हैं और फ़ाइलों को पढ़ते हैं?
यहाँ मेरी कोड का एक टुकड़ा है:
import os
import sys
rootdir = sys.argv[1]
with open('output.txt','w') as fout:
for root, subFolders, files in os.walk(rootdir):
for file in files:
if (file == 'data.txt'):
#print file
with open(file,'r') as fin:
for lines in fin:
dosomething()
मेरे DoSomething() भाग - मैं परीक्षण किया है और अगर मैं सिर्फ एक फ़ाइल के लिए वह हिस्सा चला रहा हूँ यह काम करने के लिए की पुष्टि की है। मैंने यह भी पुष्टि की है कि यदि मैं इसे फ़ाइल को प्रिंट करने के लिए कहता हूं (टिप्पणी की गई पंक्ति) लिपि 'data.txt' प्रिंट करती है।
अभी अगर मैं इसे चलाने अजगर मुझे इस त्रुटि देता है:
File "recursive.py", line 11, in <module>
with open(file,'r') as fin:
IOError: [Errno 2] No such file or directory: 'data.txt'
मुझे यकीन है कि क्यों यह यह नहीं मिल सकता है नहीं कर रहा हूँ - सब के बाद, यह data.txt बाहर प्रिंट अगर मैं uncomment 'प्रिंट फाइल' लाइन। मैं गलत तरीके से क्या कर रहा हूँ?
बस एक शैली टिप्पणी के लिए रास्तों की सरणी को बचाने: एक बार नेस्टिंग इस गहरे हो जाता है, इसे पढ़ने के लिए कठिन हो सकता है। सरल बनाने के लिए, मैं आंतरिक भाग को एक अलग 'def do_file (फ़ाइल नाम) में डाल दूंगा: ...' फ़ंक्शन। आप 'स्तर ==' data.txt 'भी कर सकते हैं: जारी रखें' को सरल बनाने और वहां एक स्तर को सहेजने के लिए। यह भी देखें [पीईपी 20] (http://www.python.org/dev/peps/pep-0020/): "फ्लैट नेस्टेड से बेहतर है"। –