2013-07-24 54 views
0

目前,我已經創建了一個代碼,用於從.csv文件中的數據生成圖表。但是,如果代碼與csv文件一起存在於文件夾中,我只能運行代碼。如何製作腳本文件,以便它不必與.csv文件位於同一目錄中。另外,我希望該腳本能夠讀取其他目錄中的每個csv文件。可以在任何目錄下運行的腳本

爲什麼下面的代碼錯誤?

Here=os.path.dirname(os.path.abspath(__file__)) 
directory = "path of directory" 
listing = os.listdir(directory) 
for files in listing: 
    if files.endswith('.csv'): 
    full_name = os.path.join(Here,files) 
    df=pd.read_csv(full_name) 
+0

由於你列出了當前目錄中的文件,所以你不需要用'Here'連接名字(so你不需要分配它)。作爲目錄名的空字符串幾乎肯定默認爲當前目錄(唯一合理的選擇是它是一個錯誤)。如果你爲'directory'指定了一些其他的值,你需要用'directory'加入這個名字。 –

回答

1

剛剛成立directory="/path/to/fldr/with/csv"

full_name = os.path.join(directory,files)

+0

由於某種原因,當我這樣做時,我收到一條錯誤消息,說沒有這樣的文件或目錄。你知道爲什麼嗎?我有正確的路徑和一切 – user2614937

+1

@ user2614937繼續說,如果它說沒有這樣的文件或目錄,你的路徑有問題。打印出來確定。 –

+0

This Works!謝謝! – user2614937

0

是的,這是錯誤的;你需要接受的是告訴你的腳本在哪裏可以找到CSV文件的說法:

import argparse 

def import_function(sourcedir): 
    for filename in os.listdir(sourcedir): 
     csvfilename = os.path.join(sourcedir, filename) 
     with open(csvfilename) as csvfile: 
      reader = csv.reader(csvfile) 
      for row in reader: 
       # etc.  

if __name__ == '__main__': 
    parser = argparse.ArgumentParser('CSV importer') 
    parser.add_argument('sourcedir', default='.') 
    options = parser.parse_args() 
    import_function(options.sourcedir) 

現在你的腳本接受一個命令行參數,對目錄的路徑要列出文件:

python yourscript.py /path/to/directory 

默認是查看當前目錄仍然。

0

您正在列出一個空目錄(directory = '')。

要獲取當前目錄,您需要os.getcwd()

我不明白指定操作目錄時會出現什麼問題。它可以通過命令行參數完成(查看sys.argv)。

+0

你可以使用''。'作爲當前目錄而不使用'os.getcwd()',不是嗎? –

+0

@JonathanLeffler當然!但是listdir返回目錄的內容,同時getcwd目錄路徑本身。既然他用它來組成一條絕對路徑,我認爲讓他也知道這個呼叫會很有用:) –

0

您正在爲變量'Here'指定所需的路徑,但是您將創建一個空字符串變量'directory'並使用它提供列表。您的列表將只包含您的基本文件夾(您的代碼在哪裏)中的文件,因爲您只搜索目錄「」中的文件。我認爲你打算用'Here'來做你的列表

directory = Here 
+0

這會繼續強制腳本與CSV文件位於同一個目錄中,不是嗎? –

相關問題