我对Linux和Python都是新手,所以我的术语和对环境的理解可能不正确,但我只是试图在网络共享上打开一个文件,似乎无法正确打开。
我在树莓派上创建了文件夹~/NAS_2,并使用fstab中的条目将其映射到NAS上的共享。ls命令和结果显示,该文件存在,并且在使用Pi帐户登录时可以从Pi中看到,该帐户是root的成员。
pi@PI-0W-02: ~ $ ls -ld ~/NAS_2
drwxrwxrwx 52 root root 0 Oct 9 08:56 /home/pi/NAS_2
共享中有一个名为setup_info.txt的文件。
pi@PI-0W-02: ~ $ ls ~/NAS_2/setup_info.txt
/home/pi/NAS_2/setup_info.txt
当我尝试使用下面的代码从Python打开文件时,我在Python代码片段后面得到了错误。
>>> file_object = open("~/NAS_2/setup_info.txt", "w")
FileNotFoundError: [Errno 2] No such file or directory: '~/NAS_2/setup_info.txt'
如果我使用下面的代码,Python似乎很乐意打开这个文件。
>>> os.chdir("NAS_2")
>>> file_object = open("setup_info.txt", "w")
显然,这是Python 101的东西,但我不明白为什么打开文件需要两个步骤,而且我不必担心在脚本中使用chdir的任何副作用。有没有办法将路径包含在打开命令中,或者我一直在使用它?
提前感谢您提供的任何帮助。
如果我理解的话,您的问题是您的python无法定位/完成相对路径。如果是这样,并且"home/pi"指向文件系统根目录中名为"pi"的目录,那么您可能需要:
import os
dir_path = os.path.join(os.path.expanduser('~'),'pi','NAS_S')
file_path = os.path.join(dir_path,'setup_info.txt')
或者整个路径看起来是什么样子,而不是:
dir_path = "~/NAS_S"
file_path = "~/NAS_S/setup_info.txt"
如果这有效,那是因为Python不知道如何处理路径开头的"~"。和/或您的python脚本/实例没有在根目录下运行。
或者,您可以使用glob
import glob, os
file_name = 'blah.ext'
glob.glob(os.path.join(os.path.expanduser('~'),'*blah.ext')) ## a list of files that match the search pattern
要了解更多关于glob的信息,请参阅上面的文档,以及fnmatch的文档,了解更多关于模式语法的信息