Форум сайта python.su
class Main: def __init__(self, ip_addr, mask, ident_number): self.ip_addr = ip_addr self.mask = mask self.ident_number = ident_number input_file = 'data/log_test.txt' read_file = open(input_file, mode='r', encoding='latin_1') output_file = 'data/info_in_log.txt' write_file = open(output_file, mode='w', encoding='latin_1') def search_info_inline(self): for num, line in enumerate(obj1.read_file, 0): if self.ip_addr in line: if self.mask in line: if self.ident_number in line: print(" Line № " + str(num) + " " + line) obj1.write_file.write(" " + line) obj1 = Main('183.39.242.81', 'CHN', '1') obj1.search_info_inline()
[code python][code python][/code][/code]
Офлайн
BjiqПлохо, у вас несколько очень принципиальных ошибок
Покритикуйте пожалуйста мой код
def search_info_inline(self): for num, line in enumerate(obj1.read_file, 0):
Офлайн
if self.ip_addr in line: if self.mask in line: if self.ident_number in line: print(" Line № " + str(num) + " " + line)
if self.ip_addr in line and self.mask in line and self.ident_number in line: print("Line № %i %s"%(num, line))
Отредактировано Rodegast (Ноя. 9, 2017 10:36:07)
Офлайн
Вероятно, что вместо self.indent_number in line должно быть, что-то self.indent_number == line.split(',').strip().
С self.mask – тоже самое, хотя такая маска в строках единственная и in, наверно, подходит.
Офлайн
FishHook, спасибо большое) разобрался с self, немного подправил код:
class Main: def __init__(self, ip_addr, mask, ident_number): self.ip_addr = ip_addr self.mask = mask self.ident_number = ident_number def open_file_to_read(self): input_file = 'data/log_test.txt' read_file = open(input_file, mode='r', encoding='UTF-8') return read_file def open_file_to_write(self): output_file = 'data/info_in_log.txt' write_file = open(output_file, mode='w', encoding='UTF-8') return write_file def close_file(self, file): file.close() def search_info_inline(self): for num, line in enumerate(self.open_file_to_read(), 0): if self.ip_addr in line and self.mask in line and self.ident_number in line: print("Line № %i %s" % (num, line)) print("Number of line = " + str(num)) self.open_file_to_write().write(line) self.close_file(self.open_file_to_write()) self.close_file(self.open_file_to_read())
Офлайн
Плохо поправил
'data/log_test.txt'
'data/info_in_log.txt'
это же константы! Почему константы у вас каждый раз заново определяются при вызове функции?
Офлайн
Сам не додумался
Офлайн
Можете подсказать, как узнать номер последней строки файла?
Офлайн
пока так сделал, но я думаю можно улучшить код, если учесть, что иногда файл может весит больше 5 Мб
def search_last_line(self): last_line = None for num, line in enumerate(self.open_file_to_read(), 0): last_line = num print('last_line = ' + str(last_line)) return last_line
Отредактировано Bjiq (Ноя. 9, 2017 20:50:54)
Офлайн
def search_last_line(self): last_line = self.open_file_to_read().readlines()[-1]: print('last_line = ' + str(last_line)) return last_line
Офлайн