После записи в файл, почему os.path.getsize все еще возвращает предыдущий размер?

get_categories(number){
 return this.http.post( url, body, {headers: headers, withCredentials:true})
      .map(t=>  {
          this.total = t.json();
          return total;
      }).share();
  );     
}

затем

this.get_category(1).subscribe(t=> {
      this.callfunc();
});
13
задан Rob Kennedy 27 April 2012 в 20:03
поделиться

3 ответа

Да, Python буферизует ваш вывод. Вам лучше отслеживать размер самостоятельно, примерно так:

size = 0
for line in f1:
  if str(line) == '</Service>\n':
    break
  else:
    f2.write(line)
    size += len(line)
    print('size = ' + str(size))

(Это может быть не на 100% точным, например, в Windows каждая строка получит байт из-за \ r \ n разделитель строк, но его должно хватить для простого разбиения на части.)

10
ответ дан 1 December 2019 в 20:11
поделиться

Самостоятельное отслеживание размера подойдет для вашего случая. Другой способ - очистить файловые буферы непосредственно перед проверкой размера:

f2.write(line)
f2.flush()  # <-- buffers are written to disk
size = os.path.getsize('split.xml')

Слишком частое выполнение этого, конечно, замедлит ввод-вывод файлов.

4
ответ дан 1 December 2019 в 20:11
поделиться

Вы пытались заменить os.path.getsize на os.tell, например:

f2.write(line)
size = f2.tell()
5
ответ дан 1 December 2019 в 20:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: