从另一个目录中读取主目录中的文件

时间:2014-11-08 00:25:00

标签: python

我正在尝试读取另一个目录中的文件。我当前的脚本位于path/to/dir。但是,我想在~/中读取一个文件。我不知道该怎么做。

我试过了f = open("~/.file")但我收到了错误

IOError: [Errno 2] No such file or directory: '~/.file'

4 个答案:

答案 0 :(得分:3)

这应该有效

from os.path import expanduser
home = expanduser("~")

答案 1 :(得分:3)

使用os.path.expanduser

import os
with open(os.path.expanduser('~/.file')) as f:
    print f.read()

答案 2 :(得分:2)

os.path.expanduser会帮助你

答案 3 :(得分:1)

简短的回答是:使用os.path.expanduserm.wasowski shows

f = open(os.path.expanduser("~/.file"))

但你为什么要这样做呢?

嗯,~/.file实际上并不意味着你的想法。它只是在当前工作目录中的一个名为.file的子目录中要求一个名为~的文件。

为什么这在命令行上有效?因为shell不会像你输入的那样只传递你的参数,所以它们会进行各种复杂的处理。

这就是./myscript.py *txt['./myscript.py', 'a.txt', 'b.txt', 'c.txt', 'd e f.txt']中为您提供argv的原因 - 因为shell在*.txt上通过在目录中查找与该模式匹配的所有内容进行全局扩展将其变为a.txt b.txt c.txt "d e f.txt"

以同样的方式,它通过查看适当的环境变量和特定于平台的默认值等将~/.file扩展为/Users/me/.file。你可以阅读bash的血腥细节;与dashtcsh和大多数其他shell(Windows cmdPowerShell除外)的内容类似。

Python直接与文件系统对话,它不会通过shell来完成它。所以,如果你想做shell做的事情,你必须明确地做:glob.globos.path.expanduseros.path.expandvarssubprocess.check_output等。

在Python中完成所有这一切的好处是它在任何地方都以相同的方式工作。即使在Windows上,shell也不知道~/.file的含义,而正确的答案可能是'C:\\Documents and Settings\\me\\Documents''\\\\FileServer\\RoamingProfiles\\me'等可疑的内容,os.path.expanduser会给你这是一件可怕的事。