2013-08-30 5 views
0

Я хочу заменить строку в файле, созданном моей программой, но я не могу использовать .replace, потому что это не в 3.3. Как заменить строку из файла с помощью двух входы (предыдущая строка, замена), вот код до сих пор:как заменить строку в файле в python

#Data Creator 
def Create(filename): 
    global UserFile 
    UserFile = open(str(filename), "w") 
    global file 
    file = (filename) 
    UserFile.close() 

#Data Adder 
def Add(data): 
    UserFile = open(file, "a") 
    UserFile.write(str(data)) 
    UserFile.close() 

#Data seeker 
def Seek(target): 
    UserFile = open(file, "r") 
    UserFile.seek(target) 
    global postition 
    position = UserFile.tell(target) 
    UserFile.close() 
    return position 

#Replace 
def Replace(take,put): 
    UserFile = open(file, "r+") 
    UserFile.replace(take,put) 
    UserFile.close 

Create("richardlovesdogs.txt") 
Add("Richard loves all kinds of dogs including: \nbeagles") 
Replace("beagles","pugs") 

Как мне это сделать, так что он заменяет слово «гончие» с «мопсов»? Я изучаю питон, так что любая помощь будет оценена

Edit:

Айв изменил заменить код этого

#Replace 
def Replace(take,put): 
    UserFile = open(file, 'r+') 
    UserFileT = open(file, 'r+') 
    for line in UserFile: 
     UserFileT.write(line.replace(take,put)) 
    UserFile.close() 
    UserFileT.close() 

, но в файле он выводит:

Richard loves all kinds of dogs including: 
pugsles 

как мне его изменить, поэтому он выводит только «мопсы», а не «мопсы»

+0

'file.replace' никогда не присутствовал в python. –

+0

'str.replace()' - метод на * строках *. Это не метод для файлового объекта. Это никогда не было. –

+0

Я уверен, что я его где-то читал, должно быть, ошибка, что другой путь есть? – Jaffar

ответ

0

Первой идеей, которая мне пришла в голову, является цикл над линиями и проверка, содержит ли данная строка слово, которое вы хотите заменить. Затем просто используйте метод string - replace. Конечно, в конце результат должен быть помещен/записан в файл.

+0

означает ли это, что весь файл в строку будет редактироваться? эффективно перезаписывать весь файл? – Jaffar

+0

вы можете использовать методы readlines, которые создают список строк для данного файла, затем вы можете перебирать список. – mic4ael

+0

@ mic4ael 'file.readlines' также загружает весь файл в память, просто перебирает объект файла для загрузки по одной строке за раз. –

0

Возможно, вы считали команду sed в оболочке Unix, которая позволит вам заменить определенный текст в файле заменяющим текстом самой оболочки.

Как уже говорилось, замена текста на Python всегда была str.replace().

Надеюсь, это поможет!

0

Самый быстрый способ сделать это, не загружая весь файл в память, использует file seek, tell and flush. Установите стартовый указатель в положение 0 и увеличьте его на len(replacement_word). Если несколько байтов фрагмента совпадают, вы устанавливаете маркер, где находитесь в файле.

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

Смежные вопросы