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

我想做以下事情:


1) 要求用户输入他们希望目录列表的文件路径。2) 取这个文件路径并在列表中输入结果,在他们输入的目录中的文本文件中,而不是当前目录。


我已经快到了,但最后一步是我似乎无法将文件保存到用户仅输入当前目录的目录中。我已经在下面列出了当前代码(适用于当前目录)。我尝试了各种变体来尝试将其保存到用户输入的目录中,但无济于事 - 任何帮助将不胜感激。


代码如下


import os


filenames = 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)


慕田峪4524236
浏览 817回答 3
3回答

Qyouu

移动到选定的目录然后做事。额外提示:在 python 2 中使用 raw_input 来避免特殊字符错误,如:或\(仅input在 python 3 中使用)import osfilenames = raw_input('Please enter your file path: ')if not os.path.exists(filenames):    print 'BAD PATH'    returnos.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)

摇曳的蔷薇

您必须更改with open ("files.txt", "w") as a:语句以不仅包含文件名,还包含路径。这是您应该使用的地方os.path.join()。Id 可以方便地首先检查用户输入是否存在os.path.exists(filepath).os.path.join(input(...))对 没有真正意义input,因为它返回一个单一的str,所以没有单独的东西要加入。import osfilepath = 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 osfilepath = 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块中的代码越多,与目录读取和文件写入无关的错误也就越多被捕获和抑制。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python