如何将子文件夹中的文件作为参数传递给python中的函数

时间:2019-12-23 02:43:42

标签: 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:[错误2]文件b'history \ filename'不存在:b'history \ filename'

这里到底出了什么问题? 当文件名位于子文件夹中时,如何将其传递给my_func?

预先感谢

3 个答案:

答案 0 :(得分:1)

首先,要独立于平台,应使用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))

相对还是绝对路径?

如果历史记录子文件夹是脚本目录的固定子文件夹,则您甚至应考虑将目标文件名确定为这样的绝对路径(另请参见this带有注释的答案):

base_dir = os.path.dirname(os.path.abspath(__file__))
my_func(os.path.join(base_dir, 'history', filename))

答案 1 :(得分:1)

您的问题的答案出了什么问题: Python尝试在名为thread::spawn的子目录中打开名为"filename"的文件,该文件不存在。您应该改为传递"history"变量的值,如下所示:

您应该使用os.path.join()

filename

或者如果文件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))

使用Python的format()的另一种方法:

import os

some_number = 3452342
filename = str(some_number) + '.csv'

my_func("history/" + filename)

答案 2 :(得分:1)

首先尝试获取当前路径,然后将获得的路径与文件名连接起来。

import os

some_number = 3452342
filename = str(some_number) + '.csv'

path_file = os.path.join(os.getcwd(), filename)

my_func(path_file)

有关如何使用python处理路径的更多信息,请查看此内容。 Common pathname manipulations