2016-10-21 2 views
0

Люди,Манипулирование файлами Python 2.7

У меня возникли трудности с манипулированием файлами.

Цель: Я разрабатываю скрипт, который должен создавать папки и копировать файлы из источника, сценарий читает пользователю количество месяцев для создания. Сценарий реплицирует файлы, равные количеству месяцев, которые нужно создать, если в 2017 году необходимо изменить строку в файл .txt в каталог.

исходная строка в файле: АНО INICIO DO Estudo 2016 Строка должна быть изменена: АНО INICIO DO Estudo 2017

PS: Файл будет изменен не оригинал, но копия

Можно ли изменить строку из txt-файла?

Что мне нужно:

чтение исходного текста программы и играть в массив идентифицирующую часть строки в массиве изменить строку, если она оказывается частью строки удалить источник файл и написать другое с тем же именем или просто изменить строку (слово в строке) в исходном файле.

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

Это не работает, вы пишете в исходном файле

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

Вы можете попробовать с somenthig так: 'импорт re' ' кэш = None' 'с открытым ("file.txt"," г "), как F:' ' \t кэш = f.read()' ' new_file = re.sub (STRING_DGER, "АНО INICIO DO Estudo {}" формат (FILE_DATE.), кэш)' ' , если new_file: ' \t' с открытым ("newfile.txt", "w") как f: ' \t \t 'f.write (new_file)' – Rollback

+0

Работает! Но строка, которая существовала в файле, все еще была там, мне нужно удалить строку «2016», которая находится в файле, и поставить «2017» на место. Если 2017 положено 2018 ... –

+0

имеет акцент в файле, появляется это сообщение об ошибке: «UnicodeDecodeError: кодек ascii не может декодировать байт 0xba в позиции 1355: порядковый номер не в диапазоне (128)» –

ответ

0

Я уверен, что это будет работать. Что касается UnicodeDecodeError плохо предлагаю вам взглянуть на 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)