2013-07-24 33 views

回答

1

假設你的意思是包括固定CSV與您的代碼文件,存儲基於腳本路徑上的絕對路徑:

HERE = os.path.dirname(os.path.abspath(__file__)) 

csv_filename = open(os.path.join(HERE, 'somefile.csv') 

__file__是當前模塊或腳本的文件名,os.path.dirname(__file__)是目錄模塊駐留在其中。對於腳本,__file__可以是相對路徑名,因此我們使用os.path.abspath()將其轉換爲絕對路徑。

這意味着你可以從任何地方運行腳本。

如果你的意思是讓你的腳本工作,任意 CSV輸入文件,使用命令行選項:

import argparse 

if __name__ == '__main__': 
    parser = argparse.ArgumentParser('CSV importer') 
    parser.add_argument('csvfile', type=argparse.FileType('w'), 
         default='somedefaultfilename.csv') 
    options = parser.parse_args() 
    import_function(options.csvfile) 

其中csvfile將是一個開放的文件對象,所以你import_function()可以這樣做:

def import_function(csvfile): 
    with csvfile: 
     reader = csv.reader(csvfile) 
     for row in reader: 
      # etc.  
+0

這是一個很好的默認設置,但爲了獲得額外的靈活性,您應該包含(使用'optparse'或您自己的命令行選項解析器)指定包含.csv文件的目標路徑,覆蓋該默認設置。 – Kudzu

+0

如果我有一個csv文件的目錄,並且不想只查看「somefile.csv」,該怎麼辦?你如何加入兩個目錄? – user2614937

+0

@ user2614937:這是一個新課題;給出一個路徑,'os.listdir()'將列出該目錄中的所有文件名。如果你遇到困難,一定要閱讀Python文檔,如果你仍然陷入困境,請提出一個新問題。 –

0

如果你不打算在csv文件中移動太多,最好的答案是硬編碼絕對路徑到csv文件夾放入腳本。

import os 

csvdir = "/path/to/csv/dir" 
csvfpath = os.path.join(csvdir, "myfile.csv") 
csvfile = open(csvfpath) 

您也可以使用命令行分析器像​​讓用戶輕鬆地更改爲CSV文件的路徑。

如果您要移動包含腳本和csv文件的文件夾,使用Martijn Pieters的解決方案將僅適用於。但是,在這種情況下,您可能只需使用相對路徑到csv文件。

相關問題