[英]How to pass a file in sub-folder as parameter to a function in python
摘自位於C:\\Users\\my_name\\documents\\python_projects\\randomness\\random.py 的我的 python 腳本:
some_number = 3452342
filename = str(some_number) + '.csv'
# file 3452342.csv is stored in C:\Users\my_name\documents\python_projects\randomness\history
# call a function that takes the filename as the parameter
my_func(r'history\filename')
它觸發以下錯誤:
FileNotFoundError: [Errno 2] 文件 b'history\\filename' 不存在:b'history\\filename'
這里到底出了什么問題? 當它位於子文件夾中時,如何將文件名傳遞給 my_func?
提前致謝
首先,要獨立於平台,您應該使用os.path.join
來連接目錄。
其次,就像@k88 指出的那樣,您需要將變量filename
傳遞到您的路徑中,而不是字符串'filename'
干凈的方法是:
import os
some_number = 3452342
filename = str(some_number) + '.csv'
# file 3452342.csv is stored in C:\Users\my_name\documents\python_projects\randomness\history
# call a function that takes the filename as the parameter
my_func(os.path.join('history', filename))
如果你的歷史子文件夾是腳本的目錄的子文件夾固定,你應該甚至考慮,以確定你的目標文件名作為像這樣的絕對路徑(見這個答案與評論):
base_dir = os.path.dirname(os.path.abspath(__file__))
my_func(os.path.join(base_dir, 'history', filename))
您的問題的答案出了什么問題:Python 嘗試在名為"history"
的子目錄中打開名稱為"filename"
的文件,該"filename"
不存在。 您應該按如下方式傳遞filename
變量的值:
您應該使用os.path.join() 。
import os
some_number = 3452342
filename = str(some_number) + '.csv'
workdir = "C:\Users\my_name\documents\python_projects\randomness\history"
my_func(os.path.join(workdir, filename))
或者,如果文件3452342.csv
放置在主腳本目錄的子文件夾(稱為history
)中,則可以使用:
import os
some_number = 3452342
filename = str(some_number) + '.csv'
my_func(os.path.join("history", filename))
或者,您可以簡單地使用字符串連接:
import os
some_number = 3452342
filename = str(some_number) + '.csv'
my_func("history/" + filename)
另一種使用 Python 的format() 的方法:
import os
some_number = 3452342
filename = str(some_number) + '.csv'
my_func("history/{}".format(filename))
首先嘗試獲取當前路徑,然后將獲得的路徑與文件名連接起來。
import os
some_number = 3452342
filename = str(some_number) + '.csv'
path_file = os.path.join(os.getcwd(), filename)
my_func(path_file)
有關如何使用 python 處理路徑的更多信息,請查看這個。 常見的路徑名操作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.