Спасибо! Я изменил код скользящего окна с here, но он по-прежнему создает меньше окна, чем должно быть.Как я могу убедиться, что мое скользящее окно создает нужное количество окон?
Если вы хотите получить дополнительную информацию по этой проблеме, я написал об исходной проблеме. Короче говоря, я имею дело с большим текстовым файлом, содержащим десятичные разряды pi, который имеет этот формат. Обратите внимание, что заголовок - это все числа и не содержит строки.
Мне нужно сделать скользящее окно, которое обрезает файл, используя три аргумента (window_size, step_size и last_windowstart). last_windowstart - это начало последнего окна.
Он работает, но там должно быть 238 окон не 237.
Я знаю lastcounter работает правильно, но я не уверен, lastwindow_start. Я попытался изменить его значение, и это определенно является частью проблемы.
Xrange должен быть частью проблемы слишком
Любые мысли о sliding_window или lastwindow_start?
inputFileName = "sample.txt"
import itertools
import linecache
def sliding_window(window_size, step_size, lastwindow_start):
for i in xrange(0, lastwindow_start, step_size):
yield (i, i + window_size)
def PiCrop(window_size, step_size):
f = open(inputFileName, 'r')
first_line = f.readline().split()
Total_Pi_Digits = int(first_line[0])
lastwindow_start = Total_Pi_Digits-(Total_Pi_Digits%window_size)
lastcounter = (Total_Pi_Digits//window_size)*(window_size/step_size)
flags = [False for i in range(lastcounter)]
first_line[0] = str(window_size)
second_line = f.readline().split()
offset = int(round(float(second_line[0].strip('\n'))))
first_line = " ".join(first_line)
f. close()
with open(inputFileName, 'r') as f:
header = f.readline()
data = [line.strip().split(',') for line in f.readlines()]
for counter, window in enumerate(sliding_window(window_size,step_size,lastwindow_start)):
chunk = data[window[0]:window[1]]
with open('PiCrop_{}.txt'.format(counter), 'w') as output:
if (flags[counter] == False):
flags[counter] = True
headerline = float(linecache.getline(inputFileName, window[1]+1)) - offset
output.write(str(window_size) + " " + str("{0:.4f}".format(headerline)) + " " + 'L' + '\n')
for item in chunk:
newline = str("{0:.4f}".format(float(str(item).translate(None, "[]'"))-offset))
output.write(str(newline) + '\n')
PiCrop(1000,500)