более быстрый анализ файла для всех элементов списка и добавление в новые файлы на основе элементов списка - PullRequest
0 голосов
/ 03 сентября 2011

Я пытаюсь проанализировать файл журнала с threadids в каждом подобном.Может быть любое количество потоков, которые можно настроить.Все потоки записывают в один и тот же файл журнала, и я анализирую файл журнала и создаю новые файлы, специфичные для каждого потока, чтобы проверить их позже.
Ниже я фиксирую потоки в списке.
Код нижеделать работу, но я чувствую, что это не эффективно.Может ли быть что-нибудь быстрее?.

sThdiD = ["abc", "cde\"efg"]
folderpath = "newdir"
os.system("mkdir " + folderpath)
for line in open(filetoopen):
    for i in sThdiD:
        if i in line:
            open(folderpath+"/"+i+".log","a+").write(line)

1 Ответ

1 голос
/ 06 сентября 2011

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

thread_map = {}  # keys are thread IDs; values are lists of log lines
for line in open(filetoopen):
  for i in sThdiD:
    if i in line:
      if i not in thread_map:
        thread_map[i] = []
      thread_map[i].append(line)

for key in thread_map:
  f = open(folderpath+"/"+key+".log", "w")
  for line in thread_map[key]:
    f.write(line)
  f.close()

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

in_file = open(filetoopen)
for i in sThdiD:
  in_file.seek(0)  # Reset the file to read from the beginning.
  out_file = open(folderpath+"/"+i+".log", "w")
  for line in in_file:
    if i in line:
      out_file.write(line)
  out_file.close()
in_file.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...