我正在尝试读取另一个目录中的文件。我当前的脚本位于path/to/dir
。但是,我想在~/
中读取一个文件。我不知道该怎么做。
我试过了f = open("~/.file")
但我收到了错误
IOError: [Errno 2] No such file or directory: '~/.file'
答案 0 :(得分:3)
这应该有效
from os.path import expanduser
home = expanduser("~")
答案 1 :(得分:3)
import os
with open(os.path.expanduser('~/.file')) as f:
print f.read()
答案 2 :(得分:2)
os.path.expanduser会帮助你
答案 3 :(得分:1)
简短的回答是:使用os.path.expanduser
,m.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
的血腥细节;与dash
,tcsh
和大多数其他shell(Windows cmd
和PowerShell
除外)的内容类似。
Python直接与文件系统对话,它不会通过shell来完成它。所以,如果你想做shell做的事情,你必须明确地做:glob.glob
,os.path.expanduser
,os.path.expandvars
,subprocess.check_output
等。
在Python中完成所有这一切的好处是它在任何地方都以相同的方式工作。即使在Windows上,shell也不知道~/.file
的含义,而正确的答案可能是'C:\\Documents and Settings\\me\\Documents'
或'\\\\FileServer\\RoamingProfiles\\me'
等可疑的内容,os.path.expanduser
会给你这是一件可怕的事。