Python File对象是真实文件吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python File对象是真实文件吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1554字,纯文字阅读大概需要3分钟。
内容图文
在Python中,文件对象可能指向真实文件,stdin,stdout,stderr,甚至是其他东西.因此它可以是文件类型,也可以是file.flush中所述的真实文件.
如何知道文件是否是真实文件?我找到了一些猜测的方法,但似乎没有一个真正可靠:
>文件不在[sys.stdin,sys.stdout,sys.stderr]中 – 似乎最安全,但仅适用于那些标准类型,不是非常通用的解决方案.
> os.path.isfile(file.name) – 看起来非常安全,但如果在某些创建模式下打开新文件我可能无效.
> file.fileno()== 0 – 这假设方法未实现,默认实现返回0,正常实现永远不会返回0.
> file.name.startswith(‘<') - 这确实假设文件系统不允许<在文件名中.
为什么我需要知道这个,是因为我想早点关闭它并使用文件作为f:可能关闭stdin / stdout这听起来像个坏主意.
解决方法:
通常,您应该使用with …作为f:仅对称,即使用您在with语句中打开或获取的文件句柄.
在UNIX上,您可以检查.fileno() – 0代表标准输入,1代表标准输出,2代表标准错误;通常你不应该关闭这些流,因为实际上没有办法重新打开它们.
file.name实际上不是100%证明方法,因为许多流可以有一个名称,即使它们不是真实文件,并且该特殊名称可能与磁盘上的现有文件冲突:
>>> import os.path
>>> os.path.exists(sys.stdin.name)
True
>>> sys.stdin.name
'<stdin>'
(提示,在我触摸’< stdin>‘之前不久)
此外,在UNIX中,习惯上在打开临时文件后立即取消链接,因此它们不再存在于该名称中;另一方面,即使现有文件在打开后也可以重命名,因此原始名称不存在.
如果要查看标准流是否重定向到文件,可以执行以下操作:
>>> import os
>>> import stat
>>> stat.S_ISREG(os.fstat(sys.stdout.fileno()).st_mode)
False
如果模式描述了普通文件,则S_ISREG返回True(此处输出转到终端,因此它为False);同样,您可以查看是否有任何文件被重定向到具有isatty的终端:
>>> os.isatty(sys.stdout.fileno())
True
内容总结
以上是互联网集市为您收集整理的Python File对象是真实文件吗?全部内容,希望文章能够帮你解决Python File对象是真实文件吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。