检查分配给 Python 中变量的文件大小 2
Check Size of File Assigned to a Variable in Python 2
作为大学课程的一部分,我正在研究一些代码(我已经获得)。
部分代码要求,我们检查我们正在写入的文件是否包含任何数据。
文件已打开写入代码内:
f = open('newfile.txt', 'w')
最初,我以为我会找到文件的长度,但是如果我尝试:len(f)>512
,我得到一个错误:
TypeError: object of type 'file' has no len()
我有一点 google 并发现了各种 link,例如 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()
编辑:感谢 link 给其他 post 摩根,但这对我不起作用。最主要的是程序仍然通过文件路径和名称引用文件,而我需要通过变量名来引用它。
根据 effbot 的 Getting Information About a File 页面,
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()
作为大学课程的一部分,我正在研究一些代码(我已经获得)。
部分代码要求,我们检查我们正在写入的文件是否包含任何数据。
文件已打开写入代码内:
f = open('newfile.txt', 'w')
最初,我以为我会找到文件的长度,但是如果我尝试:len(f)>512
,我得到一个错误:
TypeError: object of type 'file' has no len()
我有一点 google 并发现了各种 link,例如 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()
编辑:感谢 link 给其他 post 摩根,但这对我不起作用。最主要的是程序仍然通过文件路径和名称引用文件,而我需要通过变量名来引用它。
根据 effbot 的 Getting Information About a File 页面,
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()