2017-12-26 11 views
0

Ich versuche, Inhalte aus verschiedenen TXT-Dateien mithilfe von Python zusammenzuführen, aber die Herausforderung besteht darin, nur Inhalte aus denselben Dateinamen zusammenzuführen, die aus verschiedenen Ordnern stammen. Hier ist ein Screenshot für Ihre Referenz:Wie kann man Inhalte von Dateien mit demselben Namen, aber in verschiedenen Ordnern mit Python zusammenführen?

enter image description here

Bisher kann ich mit ihren vollständigen Pfade alle Dateinamen ausdrucken:

import os 

for root, dirs, files in os.walk(".", topdown=False): 
    for file in files: 
     if file.endswith(".txt"): 
      filepath = os.path.join(root, file) 
      print (filepath) 

Doch wie konnte ich Python verwenden, um nur Dateien zusammenführen mit dem gleichen Namen ... noch forschen. Lassen Sie es mich wissen, wenn Sie die Antwort wissen, oder zeigen Sie mir einen Weg, mehr zu erforschen. Vielen Dank und schöne Ferien!

+1

Sie können 'verwenden, um mit Wildcards glob' wie'/dir/*/a.txt' – user1767754

+0

Was ist die Reihenfolge der gleichen Namen zusammengeführt werden? nach dem Namen des Ordners? –

+0

Sie haben nicht erwähnt, was Ihr Problem ist, die entsprechenden Dateien finden oder zusammenführen? – user1767754

Antwort

-1

Sie sollten etwas tun, wie unten, Hinweis: Code nicht getestet.

import os 

mapped_files = {} 

for path, subdirs, files in os.walk("."): 
    for file in files: 
     if file.endswith(".txt"): 
      if file in mapped_files: 
       existing = mapped_files[file] 
       mapped_files[file] = existing.append(path) 
      else: 
       mapped_files[file] = [path] 

for key in mapped_files: 
    files = mapped_files[key] 
    first_f = os.path.join(path, files[0]) 
    with open(first_f, "a+") as current_file: 
     for path in files[1:]: # start at the second index 
      f = os.path.join(path, key) 
      content = open(f,"r").read() 
      current_file.write(content) # add all content to the first file 
0
import os 

# create a dictionary with file names as keys 
# and for each file name the paths where they 
# were found 
file_paths = {} 
for root, dirs, files in os.walk('.'): 
    for f in files: 
     if f.endswith('.txt'): 
      if f not in file_paths: 
       file_paths[f] = [] 
      file_paths[f].append(root) 

# for each file in the dictionary, concatenate 
# the content of the files in each directory 
# and write the merged content into a file 
# with the same name at the top directory 
for f, paths in file_paths.items(): 
    txt = [] 
    for p in paths: 
     with open(os.path.join(p, f)) as f2: 
      txt.append(f2.read()) 
    with open(f, 'w') as f3: 
     f3.write(''.join(txt)) 
Verwandte Themen