Как выполнить эту задачу быстрее, написав код с помощью некоторых хаков? - PullRequest
0 голосов
/ 06 сентября 2018

У меня большой текстовый файл для тестирования, содержащий около 130 миллионов слов. Для подсчета слов в файле я написал следующий код, который я называю «простым решением».

#!/usr/bin/python3.7

with open('v_i_m_utf8.txt') as infile:
    words=0
    for line in infile:
        wordslist = line.split()
        words += len(wordslist)
print(words)

Результаты, которые у меня сейчас есть:

tony@lenox:~$ time ./counting.py

 134721552

 real   0m29,391s

 user   0m28,907s

 sys    0m0,400s

 tony@lenox:~$ 

Так что, пожалуйста, возможно ли использовать некоторые внутренние приемы и приемы Python, чтобы заставить его обрабатывать строки намного быстрее?

Мне нужно просто посчитать слова и сделать это так быстро, как может среда исполнения Python.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Считается ли Cython?

cdef extern from "ctype.h":
    int isspace(int x)

def cfunc(fd):
  cdef bytes buf
  cdef int tot = 0, prev = 0, cur
  cdef char c
  while True:
      buf = fd.read(8192)
      if not buf:
        return tot
      for c in buf:
        cur = isspace(c)
        if cur and not prev:
          tot += 1
        prev = cur

Время на моем компьютере:

  • Пример OP занимает 6,5 с
  • Джорджи берет 5,3 с
  • Этот код Cython занимает 0,65 с
  • Аналогичная версия C занимает 0,73 с (не знаю, почему она длиннее Cython)

    скомпилировано с gcc -mtune=native -march=native -Wall -O3

0 голосов
/ 06 сентября 2018

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

words = len(infile.read().split())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...