2016-08-30 84 views
0

假设程序要求用户输入要读取的文件名,然后输入要处理的数据的文件。导入不在当前工作目录中的文件

是否有一种方式来获得所需要的文件的目录中,这样的程序可以改变当前目录使用它?还是有另一种方式来访问该文件?

+0

拿到目录,将要求用户输入不只是文件名,但完整的目录路径的唯一途径。该程序不能神奇地知道该文件所在的目录。 –

+0

好的,谢谢你的帮助! –

+0

您是否在询问关于_importing_模块或_read_文件?这些是非常不同的东西。 –

回答

0

如果用户输入与目录的完整文件路径,你可以分析它(使用sys.path中),然后os.chdir()那里。

+1

如果用户输入完整的路径,为什么你需要解析它?只需调用'open()'! –

0

您可以通过使用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 

不是说要求用户在键入完整的文件路径会导致一些问题,但是从个人的经验不是每个人给你,你想(更不用说不是每个人都知道文件路径语法)输入,这个例子会减少误差。

0

韦尔普,这是我的第一个SO答案,所以希望我不要误会的问题,并下车到一个糟糕的开局。这里不用什么...

坦率地说,没有太多超过之前有什么意见和答案提供了可说的。虽然有"portable" ways to "ask" for a path relative to your current working directory,但这样的设计选择并不十分明确,特别是关于用户可能认为正在发生的事情。如果这都是幕后文件操作,那是一回事,但在这种情况下,我和其他人一样,建议您询问读取和写入文件的整个路径。为了完整起见,你可以用这个启动:

# 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)会自动关闭文件给你。对于这样简单的东西,我认为上面的链接,this section on the os modulethis section on the IO itself python文档做解释你的选择和玩具的例子很好的工作。

相关问题