IOError: [Errno 2] No such file or directory writing in a file in home directory

后端 未结 2 401
广开言路
广开言路 2020-12-19 09:57

I have this code below to store some text in a file ~/.boto that is in home directory.

But Im getting this error:

IOError: [Errno 2] No such file or          


        
相关标签:
2条回答
  • 2020-12-19 10:29

    You need to use os.path.expanduser and open for writing with 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(path)

    On Unix and Windows, return the argument with an initial component of ~ or ~user replaced by that user‘s home directory.

    On Unix, an initial ~ is replaced by the environment variable HOME if it is set; otherwise the current user’s home directory is looked up in the password directory through the built-in module pwd. An initial ~user is looked up directly in the password directory.

    On Windows, HOME and USERPROFILE will be used if set, otherwise a combination of HOMEPATH and HOMEDRIVE will be used. An initial ~user is handled by stripping the last directory component from the created user path derived above.

    If the expansion fails or if the path does not begin with a tilde, the path is returned unchanged.

    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>
    

    By default a file is only open for reading, if you want to open for writing you need to use w, f you want to open for reading and writing use r+ or to append use a.

    If you have content in the file then w is going to overwrite, if you are trying to add to the file then use a

    0 讨论(0)
  • 2020-12-19 10:40

    Tilde expansions doesn't work inside open(). So python won't be able to expand ~ to /home/user

    A solution would be to read HOME environmental variable using os.environ

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

    OR

    Using os.path.join and os.environ

    >>> import os
    >>> filename = ".boto"
    >>> os.path.join( os.environ['HOME'],  filename)
    /home/user/.boto
    
    0 讨论(0)
提交回复
热议问题