2016-03-04 38 views
0

Python的文件说Python的文件IO操作占用了哪些资源?

当你和一个文件来完成,调用f.close()将其关闭并释放被打开的文件占用的系统资源。调用f.close()后,尝试使用该文件对象将自动失败。

Python文件IO如何工作以及为什么它意味着关闭文件? Python的文件IO操作占用了哪些资源?

+0

内存指针打开。您需要关闭它们以防止内存泄漏。 –

+0

什么是内存指针? – mango

+0

对内存中的位置的引用 - [指针](https://en.wikipedia.org/wiki/Pointer_(computer_programming)) –

回答

1

一般而言,您的操作系统对可以为特定进程打开的文件句柄数量有限制。这不是特定于python,而是任何在该系统上运行的编程语言。

例如,在* nix系统上,ulimit -n会告诉您可以打开的文件句柄的数量。

关闭文件句柄可确保您不会遇到错误,因为操作系统拒绝让您打开另一个文件。 :-)。

0

也许这个比喻会有所帮助。

文件是一本书。

你打开一本书 - 在编程时,这将创建some reference variable in memory指向读/写模式的“首页”或追加模式的“最后一页”。

而“书”是开放的,你可以“读”,它和“翻阅网页” - 在Python中,这是由open然后readreadlinesseek

完成的“书“保持打开状态,然后占用一些空间。 - 在编程时,这是一般的操作系统内存。想想你桌上的这个空间。

当你“关闭本书”时,它占据的空间就被释放了。考虑一下,就像把书从书桌上拿下来,放回书架上。

再次关门是不可能的,因为它已经关闭了。

未关闭“书本”并打开更多“书本”会导致空间不足,因为您只能在桌子上放置如此多的书籍 - 在编程时,这可能与resource leak相差无几。

+0

哇,这个比喻真的有帮助,谢谢!我可以在哪里阅读更多关于打开文件如何占用一般os内存的信息?哪部分内存打开文件使用? – mango

+0

好吧,一个文件就像X字节大,所以这是硬盘空间。除此之外,值得了解[堆栈和堆](http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap)内存。 –

+0

@ cricket_007 - 尽管你确定文件确实占用了内存资源,但通常这些资源是微不足道的。在内存占用会以任何可以衡量的方式影响你之前,你将会用尽可用的文件句柄。 – mgilson