目前,我已經創建了一個代碼,可以從.csv文件中的數據生成圖表。但是,如果代碼與csv文件一起存在於文件夾中,我只能運行代碼。如何製作腳本文件,以便它不必與.csv文件位於同一目錄中。我該如何做一個可以從任何目錄運行的python腳本:腳本文件不必與.csv文件位於同一目錄中?
1
A
回答
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
如果你不打算在csv文件中移動太多,最好的答案是硬編碼絕對路徑到csv文件夾放入腳本。
import os
csvdir = "/path/to/csv/dir"
csvfpath = os.path.join(csvdir, "myfile.csv")
csvfile = open(csvfpath)
您也可以使用命令行分析器像讓用戶輕鬆地更改爲CSV文件的路徑。
如果您要移動包含腳本和csv文件的文件夾,使用Martijn Pieters的解決方案將僅適用於。但是,在這種情況下,您可能只需使用相對路徑到csv文件。
相關問題
- 1. 從bash腳本轉儲文件從python腳本運行它的不同目錄
- 2. 如何在Python中刪除一個文件(位於腳本運行的同一目錄中)?
- 3. 如何從腳本中查找Python運行腳本的目錄?
- 4. 從任何目錄運行腳本
- 5. 包含與腳本不在同一目錄中的文件
- 6. 如何爲目錄中的多個文件運行腳本?
- 7. 從不同文件夾運行Python腳本:Errno 2沒有文件或目錄?
- 8. 蘋果腳本從同一目錄運行bash腳本
- 9. 批處理腳本找到一個文件所在的目錄,將位於該目錄和子目錄中的所有文件複製到另一個目錄
- 10. 將文件從一個目錄移動到另一個目錄的腳本
- 11. Shell腳本使用CSV文件名列表將文件從一個目錄複製到另一個目錄
- 12. 如何執行一個任意腳本與目錄的工作目錄?
- 13. 如何從任何地方運行perl腳本(任何目錄)
- 14. 使庫文件夾可見在不同的目錄/子目錄所有的Python腳本與GAE項目目錄
- 15. Bash,一個目錄,從腳本運行腳本,非常錯誤
- 16. 我如何從我的Perl腳本調用同一目錄中的腳本
- 17. 對目錄中的所有文件運行python腳本
- 18. shell腳本將文件從一個目錄複製到另一個目錄
- 19. 命令行python腳本在不同目錄中的文件上運行
- 20. 運行一個Python腳本中另一個目錄
- 21. 可以在任何目錄下運行的腳本
- 22. 我想其中一個腳本文件中所有子目錄
- 23. 你如何從其他目錄運行一個php腳本
- 24. 對linux中多個目錄中的文件運行shell腳本
- 25. 從目錄中的所有文本文件中刪除第一行的腳本
- 26. 如何將文件添加到目錄時運行bash腳本?
- 27. 當文件位於與腳本不同的目錄中時,如何在PHP中重命名文件?
- 28. 內EditorTemplate目錄中的文件JQuery的腳本不運行
- 29. 如何寫入位於項目目錄中的文本文件?
- 30. Unix shell腳本,用於打印目錄或子目錄中任何自述文件的第一行
這是一個很好的默認設置,但爲了獲得額外的靈活性,您應該包含(使用'optparse'或您自己的命令行選項解析器)指定包含.csv文件的目標路徑,覆蓋該默認設置。 – Kudzu
如果我有一個csv文件的目錄,並且不想只查看「somefile.csv」,該怎麼辦?你如何加入兩個目錄? – user2614937
@ user2614937:這是一個新課題;給出一個路徑,'os.listdir()'將列出該目錄中的所有文件名。如果你遇到困難,一定要閱讀Python文檔,如果你仍然陷入困境,請提出一個新問題。 –