Wie

2016-07-28 32 views
0

Linien aller Textdateien bearbeiten in einem Verzeichnis mit Python würde Ich mag zu diesem Zweck Linien aller TXT-Dateien in einem Verzeichnis mit Python bearbeiten und ersetze ich den folgenden Code verwenden:Wie

path = '.../dbfiles' 
for filename in os.listdir(path): 
for i in os.listdir(path): 
    if i.endswith(".txt"): 
     with open(i, 'r') as f_in: 
      for line in f_in: 
       line=tweet_to_words(line).encode('utf-8') 
       open(i, 'w').write(line) 

Dabei ist tweet_to_words(line) eine vordefinierte Funktion für Editierzeilen der Textdatei. Obwohl ich nicht sicher bin, ob die Logik des Codes richtig ist !? Ich bin auch mit Blick auf den folgenden Fehler:

IOError: [Errno 2] No such file or directory: 'thirdweek.txt'

aber die 'thirdweek.txt' existieren in dem Verzeichnis! Also meine Frage ist zu sehen, ob die Methode, die ich zum Bearbeiten von Zeilen in einer Datei verwende, richtig ist oder nicht !? und wenn ja, wie kann ich den Fehler beheben?

+1

Wenn die Dateien nicht riesig sind (über 1MB), empfehle ich, zuerst die Datei mit content = f.readlines() zu lesen und dann twe anzuwenden et_to_words zu jedem Element. Danach öffnen Sie die Datei erneut zum Schreiben und schreiben Sie die transformierten Zeilen zurück (f.write ("". Join (content))) – traianus

+1

Sie müssen den richtigen Pfad angeben, wie in Ohads Antwort gezeigt. Und Sie brauchen eine andere Logik, um die Datei zu bearbeiten. Momentan löscht Ihr '.write'-Aufruf alle vorhandenen Inhalte der Datei. Entweder tun Sie, was traianus vorschlägt, oder noch einfacher, erstellen Sie eine neue Datei mit den bearbeiteten Daten. –

Antwort

2

Sie sollten den Basispfad hinzufügen, wenn Sie open verwenden:

 with open(path + '/' + i, 'r') as f_in: 

das gleiche gilt für:

   open(path + '/' + i, 'w').write(line) 
+3

Obwohl die Sting-Verkettung funktioniert, ist es sicherer (und portabler), ['os.path.join'] zu verwenden (https://docs.python.org/3/library/os.path.html#os.path.join). –

1

Das glob Modul eignet sich für Dateien mit ähnlichen Endungen bekommen:

import glob 

print glob.glob("*.txt") # Returns a list of all .txt files, with path info 

for item in glob.glob("*.txt"): 
    temp = [] # Might be useful to use a temp list before overwriting your file 
    with open(item, "r") as f: 
     for line in f: 
      print line # Do something useful here 
      temp.append(line) 
    with open(item, "w") as f: 
     f.writelines(temp)