python - फ़ाइलों से चयनित लाइनों को दूसरी निर्देशिकाओं में दूसरी फ़ाइल में कॉपी करना




python-2.7 copy (3)

मेरे पास कई उपनिर्देशिका वाली एक निर्देशिका है, जिसमें फाइलें हैं मैं '' root.vrpj '' या 'root.vprj' के साथ समाप्त होने वाली फाइलों को खोलने के लिए "App_integrations" फ़ोल्डर में खोलना चाहता हूं और लाइनों की प्रतिलिपि बनाना चाहूंगा जिसमें "तालिका" शब्द दूसरी फ़ाइल में है।

अब तक मैंने इस फ़ाइल के साथ प्रत्येक फाइल को देखने में कामयाब रहे हैं:

for root, dirs, files in os.walk(movedir):
for filename in files:
    if filename.endswith(("root.vrpj", "root.vprj")):

समस्या यह है कि मेरे पास अब जिन फाइलों की मैं यात्रा करना चाहता हूँ, उनके नाम हैं और मैं यहां फंस गया हूं।


आप यह कोशिश कर सकते हैं:

f = open('final_file.txt', 'w')
for root, dirs, files in os.walk(movedir):
   for filename in files:
      if filename.endswith("root.vrpj") or  filename.endswith("root.vprj"):
         with open(filename) as data:
            for line in data:
               if "table" in data:
                   f.write('{}\n'.format(data))
f.close()

यह अजाक्स कोड का एक संस्करण है जो आपके द्वारा लूप में खोले जाने वाली फाइलों को बंद करता है (और कुछ अन्य छोटे मुद्दों को हल करता है):

with open('final_file.txt', 'w') as f:
    for root, dirs, files in os.walk(movedir):
        for filename in files:
            if filename.endswith(("root.vrpj"), ("root.vprj")):
                with open(os.path.join(root, filename)) as finput:
                     for line in finput:
                         if 'table' in line:
                             f.write(line)

हालांकि, जब आप 8 ग्रेड ऑफ इंडैन्टेशन को देखते हैं, तो आपको रिफैक्टर की आवश्यकता है, उदाहरण के लिए:

def find_files(startdir, *extensions):
    for root, dirs, files in os.walk(movedir):
        for filename in files:
            if filename.endswith(extensions):
                yield os.path.join(root, filename)

def find_lines(fname, text):
    with open(fname) as fp:
         return [line for line in fp if text in line]

with open('final_file.txt', 'w') as f:
    for fname in find_files(movedir, 'root.vrpj', 'root.vprj'):
        f.writelines(find_lines(fname, 'table'))

आखिरकार मैंने इसे हल किया

    import os

rootdir = my root folder

# creates a file f that contains all the lines of the files 
# with "root.vrpj" or "root.vprj" in their name
# and who are inside "App_integrations" folders
# without duplicates

#creating the big file with all the file containing the lines I need
f = open('final_file.txt', 'a')
for root, dirs, files in os.walk(rootdir):  
    for filename in files:
        if (filename.endswith(("root.vrpj", "root.vprj")) and ("App_Integration" in os.path.join(root, filename))):
            full_name = os.path.join(root, filename) 
            data = open(full_name).read()
            f.write(data + "\n")                 
f.close()

#copying the lines I need to f1 without duplicates
lines_seen = set()
f = open('final_file.txt')
f1 = open('testread1.txt', 'a')
doIHaveToCopyTheLine=False
for line in f.readlines():
    if (("Table" in line) and (line not in lines_seen)):
        doIHaveToCopyTheLine=True
        if doIHaveToCopyTheLine:
            f1.write(line)
            lines_seen.add(line)
f1.close()
f.close()




file-copying