कोड हमेशा आउटपुट में फ़ाइल नाम लिखता है

मैं यह जानने की कोशिश कर रहा हूं कि कौन सी फाइलों में एक समान फ़ाइल नाम (लगभग) के साथ एक प्रासंगिक फ़ाइल नहीं है ताकि मैं उन्हें उत्पन्न कर सकूं। लेकिन यह कोड मूल रूप से सभी फ़ाइल नाम लिखता है, जबकि मैं इसे पहली निर्देशिका में जाना चाहता हूं, फ़ाइलों के माध्यम से जाना चाहता हूं और जांच कर सकता हूं कि उनके पास अन्य फ़ोल्डर में उनके समतुल्य _details.txt हैं, अगर नाम नहीं लिखते हैं ।

मेरे पास फ़ोल्डर 1 में दो हैं 11.avi और 22.avi और फ़ोल्डर में केवल 11_details.txt, इसलिए मुझे यकीन है कि मुझे परिणामस्वरूप एक फ़ाइल नाम प्राप्त करना चाहिए

    import os,fnmatch
    a = open("missing_detailss5.txt", "w")
    for root, dirs, files in os.walk("1/"):
        for file1 in files:
            if file1.endswith(".dat"):
                    for root, dirs, files in os.walk("2/"):
                        print(str(os.path.splitext(file1)[0]) + "_details.txt")
                        print(files)
                        if not (os.path.splitext(file1)[0] + "_details.txt") in files:
                              print(str(os.path.splitext(file1)[0]) + "_details.txt is missing")
                              a.write(str(os.path.splitext(file1)[0]) + "_details.txt" + os.linesep)
    a.close()

    here is my debug >>> 
    11_details.txt
    ['22_details.txt']
    11_details.txt is missing
    22_details.txt
    ['22_details.txt']
    22_details.txt is missing
0
क्या समस्या है :) इसके बाद 12 के बाद मुझे इसे एक बड़े डेटाबेस पर चलाने की जरूरत है: पी कोई त्वरित टिप?
जोड़ा लेखक trackmeifUcan, स्रोत
क्षमा करें, एक पल के लिए मैंने गलत फ़ाइल नाम डाला, coz मेरे पास कई नमूने परीक्षण कर रहे हैं
जोड़ा लेखक trackmeifUcan, स्रोत
मैंने नमूना जोड़ा,
जोड़ा लेखक trackmeifUcan, स्रोत
मेरा मतलब है कि मैं आउटपुट में नाम भी देख सकता हूं
जोड़ा लेखक trackmeifUcan, स्रोत
हाँ यह बिल्कुल वही दिखता है, फिर भी यह अंदर आता है :(
जोड़ा लेखक trackmeifUcan, स्रोत
मैंने .txt का उपयोग करने का प्रयास किया और इसे कथन में छोड़ दिया और अभी भी मदद नहीं की
जोड़ा लेखक trackmeifUcan, स्रोत
मेरे पास फ़ोल्डर 1 में दो नए टेक्स्ट दस्तावेज़ - Copy.avi और New Text Document.avi और फ़ोल्डर में केवल दो टेक्स्ट दस्तावेज़_details.txt हैं, इसलिए मुझे यकीन है कि मुझे परिणामस्वरूप एक फ़ाइल नाम प्राप्त करना चाहिए
जोड़ा लेखक trackmeifUcan, स्रोत
लेकिन मुझे यकीन है कि वे करते हैं
जोड़ा लेखक trackmeifUcan, स्रोत
मैं इसे पहली निर्देशिका के माध्यम से फाइलों के माध्यम से जाना चाहता हूं और यह जांचना चाहता हूं कि क्या उनके नाम का नाम नहीं है, तो अन्य फ़ोल्डर में उनके समतुल्य _details.txt हैं
जोड़ा लेखक trackmeifUcan, स्रोत
मैंने अपनी बनाई गई 2 फाइलों के साथ एक सरल परीक्षण किया है, इसे 1 लौटा देना चाहिए जिसमें अनुपलब्ध विवरण प्रासंगिक हैं लेकिन यह दोनों लौटाता है
जोड़ा लेखक trackmeifUcan, स्रोत
यह मूल रूप से सभी फ़ाइल नाम लिखता है
जोड़ा लेखक trackmeifUcan, स्रोत
क्या आप सुनिश्चित हैं कि आपका प्रोग्राम सही फ़ाइल नाम की तलाश में है? वास्तव में किस फ़ाइल नाम की तलाश में है यह जानने के लिए एक पायथन डीबगर का उपयोग करें।
जोड़ा लेखक kviiri, स्रोत
तो आपकी समस्या क्या है?
जोड़ा लेखक kviiri, स्रोत
बस वर्णन करें कि आप अपने कार्यक्रम को क्या करना चाहते हैं, कृपया।
जोड़ा लेखक kviiri, स्रोत
आह! मुझे समझ आ गया! यहां एक त्वरित आसान तरीका है, यदि आप घर नहीं पहुंचते हैं तो मैं इसके लिए कोड लिखूंगा यदि आप समझ नहीं सकते हैं। बस फाइलों की 2 सूचियां बनाएं, एक्सटेंशन हटाएं, और दोनों को घटाएं। शेष गायब फाइलें हैं। और हाँ आप अजगर में 2 सूचियों को घटा सकते हैं।
जोड़ा लेखक Wissam Youssef, स्रोत
नमूना इनपुट और नमूना आउटपुट के उदाहरण देने के लिए पोस्ट को फिर से संपादित कर सकते हैं।
जोड़ा लेखक Wissam Youssef, स्रोत
जिसका मतलब है कि किसी अन्य फ़ोल्डर में उनके समतुल्य _details.txt नहीं है।
जोड़ा लेखक Anshu Dwibhashi, स्रोत

2 उत्तर

मैंने आपके कोड को सीधे नए कोड लिखने के बिना सही किया है, अगर आपने अभी तुलना में एक txt एक्सटेंशन को याद किया है।

import os
a = open("missing_detailss4.txt", "w")
 for root, dirs, files in os.walk("1/"):
    for file in files:
      if file.endswith(".avi"):
             for root, dirs, files in os.walk("2/"):
                  if not (str(os.path.splitext(file)[0]) + "_details.txt") in files:
                       a.write(str(os.path.splitext(file)[0]) + "_details.txt" + os.linesep)
 a.close()
0
जोड़ा
मैंने इसे प्रश्न में उपरोक्त डीबग में मुद्रित किया
जोड़ा लेखक trackmeifUcan, स्रोत
मेरे लिए काम नहीं कर रहा, क्या?
जोड़ा लेखक trackmeifUcan, स्रोत
मुझे सही चीज मिलती है, आप उपरोक्त डीबग लॉग में देख सकते हैं, उन्हें दोनों लिखित नहीं होना चाहिए
जोड़ा लेखक trackmeifUcan, स्रोत
लेकिन नहीं, यह वास्तव में सही है, आप डीबग देख सकते हैं, केवल एक ही लौटाया जाना चाहिए!
जोड़ा लेखक trackmeifUcan, स्रोत
डीबग आउटपुट >>> 11_details.txt ['22_details.txt'] 22_details.txt ['22_details.txt'] >>>
जोड़ा लेखक trackmeifUcan, स्रोत
यहां मेरा डीबग है >>> 11_details.txt ['22_details.txt'] 11_details.txt गुम है 22_details.txt ['22_details.txt'] 22_details.txt गुम है
जोड़ा लेखक trackmeifUcan, स्रोत
मेरा मतलब है कि जब मैं फाइल सूची देखता हूं तो मैं डीबग मोड में मौजूद फ़ाइल नाम देख सकता हूं! सटीक नाम और विस्तार के साथ
जोड़ा लेखक trackmeifUcan, स्रोत
यहां तक ​​कि इस छल के साथ यह काम नहीं कर रहा है अगर fnmatch.fnmatch (os.path.splitext (फ़ाइल) [0] + "_details", '* .txt') नहीं है:
जोड़ा लेखक trackmeifUcan, स्रोत
लेकिन यह सिर्फ परीक्षण के लिए था, मैंने दोनों .txt और बिना प्रयास किए: पी
जोड़ा लेखक trackmeifUcan, स्रोत
कोई सुराग नहीं ... क्षमा करें ...
जोड़ा लेखक Wissam Youssef, स्रोत
ठीक है, अपनी मूल पोस्ट को संपादित कर सकते हैं, कृपया अपने पहले डीआईआर की सामग्री, अपने दूसरे डीआईआर की सामग्री और चलने के बाद missing_details4.txt की सामग्री डालें। मैं देखना चाहता हूं कि हम कुछ खो रहे हैं या नहीं।
जोड़ा लेखक Wissam Youssef, स्रोत
यह थोड़ा फिक्स के बाद मेरे लिए काम कर रहा है। dir 1/है 1.avi 2.avi, 3.avi, 4.avi dir 2/1_details.txt है जब मैं स्क्रिप्ट चलाता हूं missing_details4.txt में शामिल हैं: 4_details.txt 2_details.txt 3_details.txt
जोड़ा लेखक Wissam Youssef, स्रोत
आप samplefile_details की तुलना अपने संस्करण में samplefile_details.txt के साथ कर रहे हैं ताकि आप हमेशा झूठी हों और आपको सभी फाइलें मिलेंगी।
जोड़ा लेखक Wissam Youssef, स्रोत

अगर मैं आपके प्रश्न को सही तरीके से पढ़ता हूं, तो "_details.txt" में समाप्त होने वाली फ़ाइलों को समान (सापेक्ष) निर्देशिका में होना चाहिए। यही है, "1/कुछ/पथ/file.avi" में एक संबंधित फ़ाइल होनी चाहिए "2/कुछ/पथ/file_details.txt"। यदि ऐसा है, तो आपको दो बार पुनरावृत्ति की आवश्यकता नहीं है:

import os
with open("missing_detailss5.txt", "w") as outfile:
    path1 = '1/'
    path2 = '2/'
    allowed_extensions = ['.dat', '.avi']
    for root, dirs, files in os.walk(path1):
        for file1 in files:
            file1, ext = os.path.splitext(file)
            if ext not in allowed_extensions: continue
            path2 = os.path.join(path2, os.path.relpath(os.path.join(root, file1 + '_details.txt'), path1))
            if not os.path.exists(path2):
                print(os.path.basename(path2) + ' is missing.')
                outfile.write(os.path.basename(path2) + os.linesep)

यदि आपको पहले फ़ोल्डर में कौन से एक्सटेंशन की जांच करने की परवाह नहीं है, तो allow_extensions = ['.dat', '.avi'] और हटाएं अगर ext_extensions में ext नहीं है: जारी रखें रेखाएं, और file1, ext = os.path.splitext (फ़ाइल) से file1 = os.path.splitext (फ़ाइल) [0] बदलें।

0
जोड़ा