Writing to a new directory in Python without changing directory

前端 未结 3 2122
被撕碎了的回忆
被撕碎了的回忆 2021-02-08 09:50

Currently, I have the following code...

file_name = content.split(\'=\')[1].replace(\'\"\', \'\') #file, gotten previously
fileName = \"/\" + self.feed + \"/\" +         


        
相关标签:
3条回答
  • 2021-02-08 09:56

    First, I'm not 100% confident I understand the question, so let me state my assumption: 1) You want to write to a file in a directory that doesn't exist yet. 2) The path is relative (to the current directory). 3) You don't want to change the current directory.

    So, given that: Check out these two functions: os.makedirs and os.path.join. Since you want to specify a relative path (with respect to the current directory) you don't want to add the initial "/".

    dir_path = os.path.join(self.feed, self.address)  # will return 'feed/address'
    os.makedirs(dir_path)                             # create directory [current_path]/feed/address
    output = open(os.path.join(dir_path, file_name), 'wb')
    
    0 讨论(0)
  • 2021-02-08 09:56

    Commands like os.mkdir don't actually require that you make the folder in your current directory; you can put a relative or absolute path.

    os.mkdir('../new_dir')
    os.mkdir('/home/you/Desktop/stuff')
    

    I don't know of a way to both recursively create the folders and open the file besides writing such a function yourself - here's approximately the code in-line. os.makedirs will get you most of the way there; using the same mysterious self object you haven't shown us:

    dir = "/" + self.feed + "/" + self.address + "/"
    os.makedirs(dir)
    output = open(os.path.join(dir, file_name), 'wb')
    
    0 讨论(0)
  • 2021-02-08 10:07

    This will create the file feed/address/file.txt in the same directory as the current script:

    import os
    
    file_name = 'file.txt'
    script_dir = os.path.dirname(os.path.abspath(__file__))
    dest_dir = os.path.join(script_dir, 'feed', 'address')
    try:
        os.makedirs(dest_dir)
    except OSError:
        pass # already exists
    path = os.path.join(dest_dir, file_name)
    with open(path, 'wb') as stream:
        stream.write('foo\n')
    
    0 讨论(0)
提交回复
热议问题