为了账号安全,请及时绑定邮箱和手机立即绑定

在python中使用“With open”写入另一个目录

在python中使用“With open”写入另一个目录

慕田峪4524236 2021-08-17 17:18:39
我想做以下事情:1) 要求用户输入他们希望目录列表的文件路径。2) 取这个文件路径并在列表中输入结果,在他们输入的目录中的文本文件中,而不是当前目录。我已经快到了,但最后一步是我似乎无法将文件保存到用户仅输入当前目录的目录中。我已经在下面列出了当前代码(适用于当前目录)。我尝试了各种变体来尝试将其保存到用户输入的目录中,但无济于事 - 任何帮助将不胜感激。代码如下import osfilenames = os.path.join(input('Please enter your file path: '))with open ("files.txt", "w") as a:    for path, subdirs, files in os.walk(str(filenames)):       for filename in files:         f = os.path.join(path, filename)         a.write(str(f) + os.linesep)
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

移动到选定的目录然后做事。


额外提示:在 python 2 中使用 raw_input 来避免特殊字符错误,如:或\(仅input在 python 3 中使用)


import os


filenames = raw_input('Please enter your file path: ')

if not os.path.exists(filenames):

    print 'BAD PATH'

    return

os.chdir(filenames)

with open ("files.txt", "w") as a:

    for path, subdirs, files in os.walk('.'):

        for filename in files:

            f = os.path.join(path, filename)

            a.write(str(f) + os.linesep)


查看完整回答
反对 回复 2021-08-17
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

您必须更改with open ("files.txt", "w") as a:语句以不仅包含文件名,还包含路径。这是您应该使用的地方os.path.join()。Id 可以方便地首先检查用户输入是否存在os.path.exists(filepath).


os.path.join(input(...))对 没有真正意义input,因为它返回一个单一的str,所以没有单独的东西要加入。


import os


filepath = input('Please enter your file path: ')

if os.path.exists(filepath):

    with open (os.path.join(filepath, "files.txt"), "w") as a:

        for path, subdirs, files in os.walk(filepath):

            for filename in files:

                f = os.path.join(path, filename)

                a.write(f + os.linesep)

请注意,您的文件列表将始终包含一个files.txt-entry,因为文件是在os.walk()获取文件列表之前创建的。


正如ShadowRanger 亲切地指出的那样,这种LBYL(在你跳跃之前先看)方法是不安全的,因为存在检查可能通过,尽管文件系统在进程运行时稍后更改,导致异常。


提到的 EAFP(请求宽恕比许可更容易)方法将使用一个try... except块来处理所有错误。


这种方法可能如下所示:


import os


filepath = input('Please enter your file path: ')

try:

    with open (os.path.join(filepath, "files.txt"), "w") as a:

        for path, subdirs, files in os.walk(filepath):

            for filename in files:

                f = os.path.join(path, filename)

                a.write(f + os.linesep)

except:

    print("Could not generate directory listing file.")

您应该通过捕获特定异常来进一步完善它。try块中的代码越多,与目录读取和文件写入无关的错误也就越多被捕获和抑制。


查看完整回答
反对 回复 2021-08-17
  • 3 回答
  • 0 关注
  • 816 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信