Gio*_*rje 34 python io operating-system module
我意识到open()我一直在使用的函数是一个别名,io.open()并且*从中导入os会掩盖这一点.
通过io模块和os模块打开文件有什么区别?
cdh*_*wie 28
io.open()是文件I/O的首选,更高级别的接口.它将OS级文件描述符包装在一个对象中,您可以使用该对象以Pythonic方式访问该文件.
os.open()只是较低级别POSIX系统调用的包装器.它需要较少的符号(和更多POSIX-y)参数,并返回表示打开文件的文件描述符(数字).它并没有返回一个文件对象; 返回的值不会有read()或write()方法.
此功能适用于低级I/O. 对于正常使用,使用内置函数
open(),该函数返回带有read()和write()方法(以及更多)的"文件对象" .
添加到现有答案:
我意识到我一直在使用的 open() 函数是 io.open() 的别名
open()==io.open()仅适用于 Python 3。在 Python 2 中它们是不同的。
在Python中,我们可以通过方便的方法open()获得易于使用的文件对象,而在操作系统级别上,文件是使用文件描述符(或Windows中的文件句柄)来访问的。因此,应该在幕后隐式使用。我还没有检查过这方面的Python源代码,但是Python 3.3中添加的参数的文档说:read()write()os.open()openeropen()
可以通过将可调用对象作为opener传递来使用自定义 opener 。然后通过使用 ( file , flags ) 调用opener来获取文件对象的底层文件描述符。opener必须返回一个打开的文件描述符(作为opener传递会产生与传递类似的功能)。
os.openNone
os.open()的默认开启器也是如此,open()如果需要更改文件标志或模式,我们还可以在它周围指定一个自定义包装器。有关自定义打开程序的示例,请参阅文档open(),该打开程序打开相对于给定目录的文件。
小智 5
在Python 2中,内置的open和io.open是不同的(io.open更新并且支持更多的东西)。在 Python 3 中,open 和 io.open 现在是同一件事(它们摆脱了旧的内置 open),因此您应该始终使用 open。需要与 Python 2 和 3 兼容的代码可能有理由使用 io.open。
下面的代码来验证这一点。
import io
with io.open("../input/files.txt") as f:
text = f.read().lower()
with open('../input/files.txt', encoding='utf-8') as f2:
text2 = f2.read().lower()
print(type(f))
print(type(f2))
# <class '_io.TextIOWrapper'>
# <class '_io.TextIOWrapper'>
Run Code Online (Sandbox Code Playgroud)