大家都知道使用 os.path() 模块可以获取文件所在路径,在项目中经常会遇到。
但是最近遇到一个问题,使用相同的代码(如下,代码功能是获得上一级目录),在PyCharm上运行与跟服务器上使用 nohup 指令运行得到的结果完全不一样,分析后才得知是因为 __file__ 的问题。
1 import os 2 print(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
为避免今后混淆,特意使用统一的代码获得当前目录和上一级目录,经过测试,该代码不管在什么地方运行都能保持一致,并且准确。
1 import os 2 print(os.path.abspath(os.path.dirname(__file__))) # 当前目录 3 print(os.path.abspath(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))) # 上一级目录
当代码中有导入自己写的模块,使用PyCharm运行是正常的,但是一旦使用 nohup 指令在服务器运行,就会提示没有找到模块,这是因为当前模块所在路径并不在PYTHONPATH中。
解决方法:在程序最上面手动将模块的路径添加到PYTHONPATH中。
import sys sys.path.append("/home/hadoop/andrew") # 将自写的项目添加进PYTHONPATH 否则在服务器中import的话找不到
这个网上有很多方法,这里列举出其中一种,在使用时直接copy即可。
1 import os 2 def countFile(dir): 3 tmp = 0 4 for item in os.listdir(dir): 5 if os.path.isfile(os.path.join(dir, item)): # 当前文件夹 6 tmp += 1 7 else: 8 tmp += countFile(os.path.join(dir, item)) # 子文件夹 9 return tmp
原文:https://www.cnblogs.com/qijunhui/p/11396544.html