Найти - Пользователи
Полная версия: Поиск и замена в файле
Начало » Python для новичков » Поиск и замена в файле
1
vladimirse
Доброго времени суток!
Подскажите пожалуйста как можно осуществить поиск по файлу и замену найденного, не создавая темповых файлов, и размер файла достаточно велик ~ 15-20Мб?
К примеру, надо в файле заменить name=Vasya на name=Petya.
FishHook
vladimirse
о велик ~ 15-20Мб
Вы на микроволновке запускаете?
20 Мб ОЗУ даже для сильно старой машины - ну абсолютно ничтожный объем данных. Делайте все операции в оперативной памяти. То есть загружаете весь объем файла в строку/список, совершаете некие действия, и заливаете результат назад.
vladimirse
FishHook
Вы на микроволновке запускаете?
Нет))) Общий объем памяти 1Gb, но мне всегда казалось, что загружать весь файл в память это плохой тон, ну и как то вообще не делается так.
Pytophone
Ничего страшного. А что поделать, если файл такой большой? Попробуйте разбить его на несколько файлов поменьше, как вариант.
vladimirse
Получился у меня вот такой скриптик:
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()

Как его можно оптимизировать?
Budulianin
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))
vladimirse
Budulianin
По-моему выдирать пароли из строки
Нет, я хочу заменить пароль в файле.
Budulianin
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))
vladimirse
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))

Спасибо! Выглядит значительно лучше моего! )))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB