2013-12-23 30 views
3

我的影片有點像結構這Python的,記住的文件

Project/ 
    src/ 
     main.py 
     include.py 
     trace.py 
    doc/ 
     readme.txt 
    lib/ 
    trace/ 
     treetrace.txt 
     datatrace.txt 

和內部trace.py我有一個應該寫在項目/跟蹤文件的代碼Python項目默認的路徑/使用

with open("path-to-Projects/trace/somefile.txt") as outfile: 
    outfile.write("some-trace-data") 

我想這樣做是爲了讓有人從Project /或Project/src /或此結構中的任何目錄運行trace.py,trace.py知道Project/trace /的路徑,以便跟蹤文件不會寫入錯誤的目錄。這可能嗎?

回答

3

我相信你的目標是寫入一個文件,其位置是相對於你的腳本。在Python中,腳本的路徑位於變量__file__中。從那裏,你減去文件名部分,然後追加../trace/filename.txt。下面是我如何做到這一點:

import os 

# Get the directory in which this script resides 
script_path = os.path.split(__file__)[0] 

# Trace file's location is relative to the script 
trace_filename = os.path.join(script_path, '..', 'trace', 'out.txt') 

print 'Trace file is at: {}'.format(trace_filename) 

討論

  • os.path.split()功能拆分腳本成片的路徑名:路徑和文件名。我只對路徑感興趣(索引0)。
  • 經過這段代碼,trace_filename包含您正在查找的文件的路徑。
+0

Bleh,我有我的'os.path.join'調用錯誤。我喜歡'os.path.dirname'比'os.path.split(__ file __)[0]'更好(它們返回相同的值,但'dirname'名稱使得它更清晰),但是你的'os.path .join'電話是正確的,所以我刪除了我的,並upvoted你的。 –

+0

我不知道'os.path.dirname'。好決定。 –