Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 31, 2013 16:48:23

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск и замена в файле

Доброго времени суток!
Подскажите пожалуйста как можно осуществить поиск по файлу и замену найденного, не создавая темповых файлов, и размер файла достаточно велик ~ 15-20Мб?
К примеру, надо в файле заменить name=Vasya на name=Petya.

Отредактировано vladimirse (Окт. 31, 2013 16:49:23)

Офлайн

#2 Окт. 31, 2013 18:53:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Поиск и замена в файле

vladimirse
о велик ~ 15-20Мб
Вы на микроволновке запускаете?
20 Мб ОЗУ даже для сильно старой машины - ну абсолютно ничтожный объем данных. Делайте все операции в оперативной памяти. То есть загружаете весь объем файла в строку/список, совершаете некие действия, и заливаете результат назад.



Офлайн

#3 Ноя. 1, 2013 07:02:35

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск и замена в файле

FishHook
Вы на микроволновке запускаете?
Нет))) Общий объем памяти 1Gb, но мне всегда казалось, что загружать весь файл в память это плохой тон, ну и как то вообще не делается так.

Офлайн

#4 Ноя. 1, 2013 08:33:46

Pytophone
От: Владивосток
Зарегистрирован: 2013-11-01
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск и замена в файле

Ничего страшного. А что поделать, если файл такой большой? Попробуйте разбить его на несколько файлов поменьше, как вариант.

Офлайн

#5 Ноя. 1, 2013 09:02:44

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск и замена в файле

Получился у меня вот такой скриптик:

import re
passwd = 'asdad322ed'
file = 'file.txt'
input_file = open(file, 'r')
data = []
for i in input_file.readlines():
    if re.findall('password=[\'A-Za-z0-9]+', i):
        i = 'password=\''+passwd+'\''
    data.append(i)
input_file.close()
output_file = open('ofile.txt', 'w+')
for i in data:
    output_file.writelines(i)
output_file.close()

Как его можно оптимизировать?

Офлайн

#6 Ноя. 1, 2013 09:40:10

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Поиск и замена в файле

vladimirse
По твоим записям, не очень понял, что ты хочешь

По-моему выдирать пароли из строки

Тогда лучше так

import re
pattern = re.compile(r'password=([\'A-Za-z0-9]+)')
with open('input.txt') as f_in:
    passwd_lst = map(pattern.findall, f_in)
with open('output.txt', 'w') as f_out:
    for elem in passwd_lst:
        map(f_out.write, '\n'.join(elem))



Отредактировано Budulianin (Ноя. 1, 2013 09:40:52)

Офлайн

#7 Ноя. 1, 2013 10:24:43

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск и замена в файле

Budulianin
По-моему выдирать пароли из строки
Нет, я хочу заменить пароль в файле.

Офлайн

#8 Ноя. 1, 2013 10:34:22

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Поиск и замена в файле

vladimirse
import re
passwd = 'password=asdad322ed'
pattern = re.compile(r'password=([\'A-Za-z0-9]+)')
with open('input.txt') as f_in:
    with open('output.txt', 'w') as f_out:
        for line in f_in:
            f_out.write(pattern.sub(passwd, line))



Отредактировано Budulianin (Ноя. 1, 2013 10:35:55)

Офлайн

#9 Ноя. 1, 2013 10:55:47

vladimirse
Зарегистрирован: 2013-09-02
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск и замена в файле

Budulianin
import re
passwd = ‘password=asdad322ed’
pattern = re.compile(r'password+)')
with open('input.txt') as f_in:
with open('output.txt', ‘w’) as f_out:
for line in f_in:
f_out.write(pattern.sub(passwd, line))

Спасибо! Выглядит значительно лучше моего! )))

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version