2013-08-22 8 views
9

मुझे वर्तमान निर्देशिका में रहने के दौरान अपने पथ का उपयोग किए बिना एक अलग निर्देशिका से एक फ़ाइल खोलने की आवश्यकता है।विभिन्न निर्देशिकाओं में सभी फ़ाइलों को खोलें python

जब मैं नीचे दिए गए कोड को निष्पादित करें:

for file in os.listdir(sub_dir): 
    f = open(file, "r") 
    lines = f.readlines() 
    for line in lines: 
     line.replace("dst=", ", ") 
     line.replace("proto=", ", ") 
     line.replace("dpt=", ", ") 

मैं त्रुटि संदेश FileNotFoundError: [Errno 2] No such file or directory: प्राप्त है क्योंकि यह एक उप निर्देशिका में है।

प्रश्न: वहाँ एक ओएस आदेश मैं उपयोग कर सकते हैं कि पता लगाने और sub_dir में फ़ाइल खोलने जाएगा है?

धन्यवाद! मुझे बताओ कि यह दोहराना है, मैंने खोज की और उसे नहीं मिला लेकिन शायद इसे याद किया हो।

+0

का उपयोग कर आप खुले() फंक्शन में अपनी फ़ाइल को sub_dir पथ को जोड़ने के लिए इसे खोलने के लिए सक्षम होना चाहिए फ़ाइलों की प्रतिलिपि बनाना। –

उत्तर

11

os.listdir()केवल पथ के बिना फ़ाइल नाम सूचीबद्ध करता है। इन sub_dir के साथ फिर से प्रारंभ में लगा:

for filename in os.listdir(sub_dir): 
    f = open(os.path.join(sub_dir, filename), "r") 

यदि सब आप कर रहे हैं फ़ाइल, फ़ाइल पर ही बस पाश से लाइनों पर पाश है, with का उपयोग करके यह सुनिश्चित हो जाता है कि जब भी किया जाता है तो फ़ाइल आपके लिए बंद हो जाती है। इतना ही नहीं बल्कि, str.replace()रिटर्न नया स्ट्रिंग मान, नहीं, मूल्य ही बदल ताकि आप उस वापसी मान संग्रहीत करना:

for filename in os.listdir(sub_dir): 
    with open(os.path.join(sub_dir, filename), "r") as f: 
     for line in f: 
      line = line.replace("dst=", ", ") 
      line = line.replace("proto=", ", ") 
      line = line.replace("dpt=", ", ") 
+0

अगर मैं 'फ़ाइल नाम' में नई लाइन लिखना चाहता हूं, तो क्या मैं 'f.write (line) 'जोड़ूंगा और' ए 'मोड में खुल जाऊंगा? – hjames

+0

@hjames: निश्चित रूप से, 'ओपन()' कॉल के 'मोड' पैरामीटर को समायोजित करें। –

+0

हम्म, अगर मैं इसे 'ए' या 'डब्ल्यू' मोड में डालता हूं, तो यह एक त्रुटि देता है कि फ़ाइल पठनीय नहीं है। अगर मैं इसे 'आर' मोड में डालता हूं तो यह स्पष्ट रूप से फ़ाइल को नहीं लिख सकता है। – hjames

10

आप पूरा पथ देना चाहिए अगर उन फ़ाइलों को वर्तमान में नहीं हैं निर्देशिका:

f = open(os.path.join(sub_dir, file)) 

मैं एक चर नाम, हो सकता है filename रूप file का उपयोग नहीं होता है, के बाद से इस अजगर में किसी फ़ाइल वस्तु बनाने के लिए प्रयोग किया जाता है।

-1

कोड shutil

import shutil 
import os 

source_dir = "D:\\StackOverFlow\\datasets" 
dest_dir = "D:\\StackOverFlow\\test_datasets" 
files = os.listdir("D:\\StackOverFlow\\datasets") 

if not os.path.exists(dest_dir): 
    os.makedirs(dest_dir) 

for filename in files: 
    if file.endswith(".txt"): 
     shutil.copy(os.path.join(source_dir, filename), dest_dir) 

print os.listdir(dest_dir) 
संबंधित मुद्दे