Форум сайта python.su
Подскажите пожалуйста как замаскировать номер банковской карты (16 знаков)?
На входе лог-txt файл, в котором местами имеются полные номера карт, которые нужно привезти отвида : 1234123412341234 к виду: 1234 **** **** 1234
чтение - запись в файл реализованы.
Офлайн
ну я думаю проблемно будет потом определить какая цифра спрятана под * проще зашифровать или буквами или цифрами. да еще не просто тупо сменить допустим 2 на 8 а хитрей допустим первую 2 меняем на 8 или букву а например вторую уже на 4 или букву в и так по всей строке
Офлайн
>>> def f(s): ... return s[:4] + ' **** **** ' + s[-4:] ... >>> f('1234123412341234') '1234 **** **** 1234'
Офлайн
terabaytну а когда вы считаете эту строку из файла ‘1234 **** **** 1234’ как восстановить исходные цифры? хотя может это автору не нужно, не уточнил.
Офлайн
Скорее всего автор сохраняет в другой файл! ТОгда при востановлении из изначального можно выкусить по поиску фулл номер
Офлайн
не так. Запись в тот же файл.
import os, re files = os.listdir(".") # листинг текущей директории LogFilesNames = filter(lambda x: x.endswith('.log'), files) # отобрать все лог файлы print'Files:',len(LogFilesNames) lc=0 for n in LogFilesNames: # цикл по именам файлов f = open(n,'r+').readlines() # читаем строки каждого файла print'File: ',n,'\nLines: ',len(f) for i in range(len(f)): # цикл по номерам строк тут нужно найти паны и замаскировать их with open(n,'w') as F: print type(F) print type(f) F.writelines(f) # применение изменений в файле print'Edited lines: ',lc # вывод числа отредактированных строк print'Applying in file: ',F.name # вывод имени обработанного файла
Отредактировано matue (Авг. 31, 2016 08:36:03)
Офлайн
Вы наверное задачу опишите поточнее
а то какаято магия получается
Офлайн
есть решение!
import os, re files = os.listdir(".") # листинг текущей директории LogFilesNames = filter(lambda x: x.endswith('.log'), files) # отобрать все лог файлы print'Files:',len(LogFilesNames) Pattern=r'\D(\d{4})\d{8}(\d{4})\D' #паттерн Mask=r' \1 **** **** \2 ' #маска for n in LogFilesNames: # цикл по именам файлов f = open(n,'r').readlines() # читаем строки файла print'File: ',n,'\nLines: ',len(f) f_text=''.join(f) # инициируем переменную f_text и помещаем в нее текстовое содержимое файла f_new_text = re.sub(Pattern, Mask, f_text) # в f_new_text пишем обработанный с помощью регулярного выражения текст f = open(n, 'w') #открытие файла для записи print'Applying in file: ',n # вывод имени обработанного файла f.write(f_new_text) #запись в файл преобразованного текста f.close() #закрытие файла
Офлайн