2016-05-23 17 views
-1

Ich bin neu in Python und möchte nach jeder Zeile aller Dateien (nur in angegebenen Dateierweiterungen) in einem Stammordner und allen Unterordnern mit einem Python-Skript eine Textzeile hinzufügen . Was ich aus dem Internet gesammelt:Write Zeichenfolge nach jeder Zeile in jeder Datei eines Ordners

import os 
import fnmatch 

for root, dirs, files in os.walk("dir"): 
    for filename in files: 
     if filename.endswith(".x",".y"): 
      with open(filename, "r") as f: 
       file_lines = [''.join([x.strip(), "some_string", '\n']) for x in f.readlines()] 
      with open(filename, "w") as f: 
       f.writelines(file_lines) 

ich es mit einem kleinen Ordner getestet, aber den Fehler: IOError: [Errno 2] Datei oder Verzeichnis

Antwort

0

Öffnen Sie die Datei in append Modus.

-Code -

import os 


def foo(root, desired_extensions, text_line): 
    for subdir, dirs, files in os.walk(root): 
     for f in files: 
      file_path = os.path.join(subdir, f) 
      file_extension = os.path.splitext(file_path)[1] 
      if file_extension in desired_extensions: 
       with open(file_path, 'a') as f: 
        f.write(text_line + '\n') 


if __name__ == '__main__': 
    foo('/a/b/c/d', {'.txt', '.cpp'}, 'blahblahblah') 
0

Das Problem ist, dass Sie versuchen, Datei zuzugreifen nur durch seinen Namen - den Weg seiner Lage zu ignorieren. Sie müssen einen vollständigen Pfad verwenden, um auf die Datei zuzugreifen: os.path.join (root, Dateiname)

0

filename enthält den Pfad nicht. Sie müssen den vollständigen Pfad selbst erstellen, indem Sie root und filename beitreten. Ich würde folgendes vorschlagen:

for path, _, files in os.walk("dir"): 
    for filename in files: 
     if os.path.splitext(filename)[1] in ("x", "y"): 
      with open(os.path.join(path, filename)) as file: 
       file_lines = ... 
      ... 
Verwandte Themen