Как работает нарезка в Python 3?
Я написал небольшую программу, которая обрабатывает 7.1 ГБ строк слов в урезанный формат (инфиксы).
В настоящее время я получаю скорость обработки около 1,3 МБ / с для коллекции файлов. У меня уже есть некоторые улучшения с использованием общих руководств, но я чувствую, что мне может не хватать реальной производительности. Я подозреваю, что узким местом является нарезка строк в функции inFix()
, но пока не было найдено более быстрого решения.
Мне не хватает какой-то важной концепции или Python просто не подходит для такой задачи (пока)?
def inFix(w, infixSize):
length = len(w)
if length > infixSize :
surround = length - infixSize
pre = surround // 2
suf = surround - pre
return w[pre:-suf]
else:
return w<br>
def infix2g(line):
return ("i %s %s %s\t%s\ni %s %s %s\t%s\ni %s %s %s\t%s\ni %s %s %s\t%s\ni %s %s %s\t%s\n"
% ( inFix(line[1],1), inFix(line[2],1), inFix(line[3],1), line[0],
inFix(line[1],2), inFix(line[2],2), inFix(line[3],2), line[0],
inFix(line[1],3), inFix(line[2],3), inFix(line[3],3), line[0],
inFix(line[1],4), inFix(line[2],4), inFix(line[3],4), line[0],
inFix(line[1],5), inFix(line[2],5), inFix(line[3],5), line[0]))<br>
uniOut = open('3-gram.txt', 'wt', encoding='iso-8859-15')
for line in open('3-gram-1to5_infixes.txt', encoding='iso-8859-15'):
line = line.split()
if len(line) != 4:
continue
uniOut.write(infix2g(line))</p>
<code>uniOut.close()
</code>