假设程序要求用户读取文件名,然后要求用户将处理后的数据写入文件。
有没有办法获取所需文件的目录,以便程序可以更改当前目录以使用它?还是有其他方法可以访问该文件?
Welp,这是我对 SO 的第一个答案,所以希望我不会误解这个问题并开始一个糟糕的开始。这里什么都没有...
坦率地说,没有什么比之前的评论和答案提供的更多要说的了。虽然有一些“便携式”方式可以“询问”相对于当前工作目录的路径,但这样的设计选择并不那么明确,尤其是在用户可能认为正在发生的事情方面。如果这都是幕后文件操作,那是一回事,但在这种情况下,我和其他人一样,建议您询问读取和写入文件的完整路径。为了完整起见,您可以从以下内容开始:
# responses should be of the form
# full/path/from/home/directory/to/file/my_read_and_write_files.txt
fileToReadPath = input("Provide the full path to your read file: ")
fileToWritePath = input("Provide the full path to your write file: ")
with open(fileToReadPath, 'r') as readFile, open(fileToWritePath, 'w') as writeFile:
# do stuff with your files here!
# e.g. copy line by line from readFile to writeFile
for line in readFile:
writeFile.write(line)
请注意,完成后,上下文管理器 ( with
) 会自动为您关闭文件。对于像这样的简单内容,我认为上面的链接、关于 os 模块的这一部分和关于 Python 文档的 IO 本身的这一部分在解释您的选项和玩具示例方面做得很好。
如果用户输入带有目录的完整文件路径,您可以解析它(使用 sys.path),然后在那里解析 os.chdir()。
您可以通过使用 Tkinter 以文件上传框提示他们而不是要求他们输入来使用户更容易。当他们选择文件时,它将为您提供完整的文件路径。
from tkinter import filedialog
# this gives you the full file path
filepath = askopenfilename()
print filepath
# or do whatever you want with the file path
并不是说要求用户输入完整的文件路径会导致问题,但从个人经验来看,并不是每个人都会给你你想要的输入(更不用说不是每个人都知道文件路径语法),这个例子会减少错误利润。