【问题标题】:Writing to a new directory in Python without changing directory在 Python 中写入新目录而不更改目录
【发布时间】:2011-12-17 16:04:25
【问题描述】:

目前,我有以下代码...

file_name = content.split('=')[1].replace('"', '') #file, gotten previously
fileName = "/" + self.feed + "/" + self.address + "/" + file_name #add folders 
output = open(file_name, 'wb')
output.write(url.read())
output.close()

我的目标是让python将文件(在file_name下)写入当前目录(即保存python脚本的IE)“feed”文件夹中的“address”文件夹中的一个文件

我已经查看了 os 模块,但我不想更改当前目录,而且这些目录还不存在。

【问题讨论】:

    标签: python file rss io directory


    【解决方案1】:

    首先,我不是 100% 确信我理解了这个问题,所以让我陈述一下我的假设: 1)您想写入一个尚不存在的目录中的文件。 2) 路径是相对的(相对于当前目录)。 3) 你不想改变当前目录。

    因此,鉴于: 查看这两个函数:os.makedirs 和 os.path.join。由于您要指定相对路径(相对于当前目录),您不想添加初始的“/”。

    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')
    

    【讨论】:

    • os.makdirs(dir_path, exists_ok=True) 如果 dir 存在,则不会引发 OSError 异常。如果目录存在,默认是引发 OSError。
    【解决方案2】:

    这将在与当前脚本相同的目录中创建文件feed/address/file.txt

    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')
    

    【讨论】:

      【解决方案3】:

      os.mkdir 这样的命令实际上并不要求您在当前目录中创建文件夹;您可以放置​​相对或绝对路径。

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

      除了自己编写这样的函数之外,我不知道递归创建文件夹和打开文件的方法——这大约是内联代码。 os.makedirs 将带你去那里的大部分地方;使用你没有展示给我们的同一个神秘的自我对象:

      dir = "/" + self.feed + "/" + self.address + "/"
      os.makedirs(dir)
      output = open(os.path.join(dir, file_name), 'wb')
      

      【讨论】:

        猜你喜欢
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 2022-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多