2016-10-21 2 views
0

Leute,Dateien manipulieren Python 2.7

Ich habe hier eine Schwierigkeit, Dateien zu manipulieren.

Ziel: Ich entwickle ein Skript, das Ordner erstellen und Dateien von einer Quelle kopieren muss, liest das Skript den Benutzer die Anzahl der Monate zu erstellen. Das Skript repliziert die Dateien entsprechend der Anzahl der zu erstellenden Monate, wenn im Jahr 2017 eine Zeichenfolge in eine TXT-Datei in das Verzeichnis geändert werden muss.

Original-String in der Datei: ANO INICIO DO ESTUDO 2016 String geändert werden soll: ANO INICIO DO ESTUDO 2017

PS: Die Datei geändert werden soll, nicht das Original, sondern eine Kopie

Es ist möglich, eine Zeile aus einer TXT-Datei zu ändern?

Was ich brauche:

lesen Programm Quelldatei und spielen auf ein Array einen Teil einer Zeichenfolge innerhalb des Arrays identifiziert die Zeichenfolge ändern, wenn es gefunden wird, Teil der Zeichenfolge löschen, die Quelle zu sein file und schreibe einen anderen mit dem gleichen Namen oder ändere einfach einen String (ein Wort in einer Zeile) innerhalb der Quelldatei.

FILENAME_NEWAVE = Path of the source file 
STRING_DGER = String to be searched 
FILE_DATE = Year 

Diese nicht funktioniert, schreiben Sie in der Quelldatei

def find_word_in_file_dger(FILENAME_NEWAVE, STRING_DGER, FILE_DATE): 
    f = open(FILENAME_NEWAVE, "r+") 
    file_array = f.readlines() 
    for i in file_array: 
     if i.find(STRING_DGER.encode('utf-8')): 
      f.write(i) 
     else: 
      print ("TO LENDO O ARRAY") 
      if FILE_DATE == "2016": 
       continue 
      else: 
       i.replace(STRING_DGER, "ANO INICIO DO ESTUDO " + FILE_DATE) 
       f.write(i) 
       print("TO ESCREVENDO A LINHA CORRETAMENTE MLK!! ") 
      return i 
    f.close() 
    return False 
+0

Sie können versuchen, mit somenthig wie folgt geben: 'Import re' ' cache = None' 'mit open ("file.txt"," r ") als f:' ' \t cache = f.read()' ' new_file = re.sub (STRING_DGER "ANO INICIO DO ESTUDO {}" -Format (file_date.), cache)' 'wenn new_file: ' \t' mit open ("newfile.txt", "w") als f: ' \t \t 'f.write (new_file)' – Rollback

+0

Funktioniert! Aber die Zeichenfolge, die in der Datei existierte, war immer noch da, ich muss die Zeichenfolge "2016" löschen, die sich in der Datei befindet, und "2017" einfügen. Wenn 2017 setzen 2018 ... –

+0

hat der Akzent auf die Datei erscheint diese Fehlermeldung, "UnicodeDecodeError: 'Ascii' Codec kann Byte 0xba in Position 1355 nicht dekodieren: Ordnungszahl nicht im Bereich (128)" –

Antwort

0

Ich bin ziemlich sicher, das wird funktionieren. die UnicodeDecodeError Bezüglich krank schlagen Sie einen Blick auf this

import re 
cache = None 
with open("file.txt", "r") as f: 
    cache = f.read() 
new_file = re.sub("2017", "2018", cache) 
new_file = re.sub("2016", "2017", new_file) 
if new_file: 
    with open("newfile.txt", "w") as f: 
     f.write(new_file)