2016-02-25 4 views
1

Я работаю над некоторым кодом (который мне предоставлен), как часть курсовой работы в университете.Проверить размер файла, присвоенного переменной в Python 2

Часть кода требует, чтобы мы проверяли файл, который мы пишем, чтобы содержать любые данные.
Файл был открыт для записи в коде уже:

f = open('newfile.txt', 'w') 

Первоначально я думал, что я просто найти длину файла, однако, если я попытаюсь: len(f)>512, я получаю сообщение об ошибке:

TypeError: object of type 'file' has no len()

у меня было немного гугле и нашел различные ссылки, такие как here, однако, когда я пытаюсь с помощью строки: os.stat(f).st_size > 512, я получаю следующее сообщение об ошибке:

TypeError: coercing to Unicode: need string or buffer, file found

Если я попытаюсь использовать имя самого файла: os.stat("newfile.txt").st_size > 512, он отлично работает.

Мой вопрос: есть ли способ, которым я могу использовать переменную, которой был назначен файл, f, или это просто невозможно?

Для контекста, функция выглядит следующим образом:

def doData(): 
global data, newblock, lastblock, f, port 
if f.closed: 
    print "File " + f.name + " closed" 
elif os.stat(f).st_size>512: 
    f.write(data) 
    lastblock = newblock 
    doAckLast() 

EDIT: Спасибо за ссылку на другой пост Морган, однако это не работает для меня. Главное, что программы все еще ссылаются на файл по пути и имени файла, тогда как мне нужно ссылаться на него вместо имени переменной.

+3

После того, как вы откроете файл с ' 'w'', вы удалите все содержимое файла. Вы должны проверить * до *, вы открываете файл для записи. Из-за этого вы не можете использовать 'f' для проверки. – zondo

+0

Возможный дубликат [python как проверить файл пустым или нет] (http://stackoverflow.com/questions/2507808/python-how-to-check-file-empty-or-not) –

+0

'f.tell() 'можно использовать для чтения позиции файла и указать, был ли в файле уже записаны некоторые данные, но, как сказал @zondo, файл усекается при открытии для записи. –

ответ

1

Getting Information About a File Согласно странице effbot, в

The os module also provides a fstat function, which can be used on an opened file. It takes an integer file handle, not a file object, so you have to use the fileno method on the file object:

This function returns the same values as a corresponding call to os.stat.

f = open("file.dat") 
st = os.fstat(f.fileno()) 

if f.closed: 
    print "File " + f.name + " closed" 
elif st.st_size>512: 
    f.write(data) 
    lastblock = newblock 
    doAckLast() 

 Смежные вопросы

  • Нет связанных вопросов^_^