IOError:[Errno 2]在主目录中的文件中没有写入此类文件或目录

时间:2015-05-10 12:24:07

标签: python

我有以下代码将一些文本存储在主目录中的文件〜/ .boto中。

但我得到了这个错误:

IOError: [Errno 2] No such file or directory: '~/.boto'

这是代码:

file = open("~/.boto") 
file.write("test")
file.close()

2 个答案:

答案 0 :(得分:19)

您需要使用os.path.expanduser并打开以便使用w进行编写:

import  os

# with will automatically close your file
with open(os.path.expanduser("~/.boto"),"w") as f:
    f.write("test") # write to file

<强> os.path.expanduser(路径)

  

在Unix和Windows上,返回参数,其中〜或〜用户的初始组件由该用户的主目录替换。

     

在Unix上,如果设置了初始〜,则由环境变量HOME替换;否则,通过内置模块pwd在密码目录中查找当前用户的主目录。直接在密码目录中查找初始〜用户。

     

在Windows上,如果设置将使用HOME和USERPROFILE,否则将使用HOMEPATH和HOMEDRIVE的组合。通过从上面派生的创建的用户路径中剥离最后一个目录组件来处理初始〜用户。

     

如果扩展失败或者路径没有以波浪号开头,则路径将保持不变。

In [17]: open("~/foo.py")
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-17-e9eb7789ac68> in <module>()
----> 1 open("~/foo.py")

IOError: [Errno 2] No such file or directory: '~/foo.py'

In [18]: open(os.path.expanduser("~/foo.py"))
Out[18]: <open file '/home/padraic/foo.py', mode 'r' at 0x7f452d16e4b0>

默认情况下,文件只能打开阅读,如果你想打开写作,你需要使用w,如果你想打开阅读和写作使用r+或附加使用{ {1}}。

如果您在文件中有内容,则a覆盖,如果您尝试添加到该文件,请使用w

答案 1 :(得分:3)

Tilde扩展在open()内无效。因此,python无法将~扩展为/home/user

解决方案是使用os.environ

阅读HOME环境变量
import os

home = os.environ['HOME']
file = open( home + "/.boto", "w") 
file.write("test")
file.close()

使用os.path.joinos.environ

>>> import os
>>> filename = ".boto"
>>> os.path.join( os.environ['HOME'],  filename)
/home/user/.boto