1 文件路徑
大家都知道使用 os.path() 模塊可以獲取文件所在路徑,在項目中經常會遇到。
但是最近遇到一個問題,使用相同的代碼(如下,代碼功能是獲得上一級目錄),在PyCharm上運行與跟服務器上使用 nohup 指令運行得到的結果完全不一樣,分析后才得知是因為 __file__ 的問題。
1 import os 2 print(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
- 若是使用 nohup 指令,在項目的根目錄運行,得到的結果是與在PyCharm上運行的結果相同;
- 若是使用 nohup 指令, cd 進到項目中py文件所在目錄運行,得到的結果與在PyCharm上運行的結果不同。
為避免今后混淆,特意使用統一的代碼獲得當前目錄和上一級目錄,經過測試,該代碼不管在什么地方運行都能保持一致,並且准確。
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__))))) # 上一級目錄
2 導入包路徑
當代碼中有導入自己寫的模塊,使用PyCharm運行是正常的,但是一旦使用 nohup 指令在服務器運行,就會提示沒有找到模塊,這是因為當前模塊所在路徑並不在PYTHONPATH中。
解決方法:在程序最上面手動將模塊的路徑添加到PYTHONPATH中。
import sys sys.path.append("/home/hadoop/andrew") # 將自寫的項目添加進PYTHONPATH 否則在服務器中import的話找不到
3 得到指定目錄下所有文件的個數(包括子文件夾)
這個網上有很多方法,這里列舉出其中一種,在使用時直接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