Python之文件路徑問題


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM