我正在研究一些代码(我已经获得),作为大学课程的一部分。
部分代码要求我们检查我们写的文件是否包含任何数据 该文件已在代码中打开以进行写入:
f = open('newfile.txt', 'w')
最初,我认为我只会找到文件的长度,但是如果我尝试:len(f)>512
,我会收到错误:
TypeError:类型'文件'的对象没有len()
我有一些谷歌并找到了各种链接,例如here,但是当我尝试使用该行:os.stat(f).st_size > 512
时,收到以下错误消息:
TypeError:强制转换为Unicode:需要字符串或缓冲区,找到文件
如果我尝试使用文件名本身: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()
编辑:感谢您与摩根的其他帖子的链接,但这对我没有用。主要的是程序仍然按文件路径和名称引用文件,而我需要通过变量名引用它。
答案 0 :(得分:1)
根据effbot的Getting Information About a File页面,
os模块还提供了一个fstat函数,可用于 打开文件。它需要一个整数文件句柄,而不是文件对象,所以 你必须在文件对象上使用fileno方法:
此函数返回与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()