稍后,我试图简化CSV解析过程,所以我创建了一个小文件,使我可以运行parse_csv.toList('data.csv')
并将列表返回到脚本中。 parse_csv.py 导入的文件如下所示:
import csv
def toList(file_location_name):
result_list = []
with open(file_location_name) as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
for row in csv_reader:
result_list.append(row)
return result_list
这是我在试图利用该文件的脚本中调用它的方式:
import parse_csv
print(
parse_csv.toList('../data.csv')
)
运行 import-test.py 时出现以下错误:
Traceback (most recent call last):
File "{system path placeholder}\directory-test\import-test.py", line 5, in <module>
parse_csv.toList('../data.csv')
File "{system path placeholder}\parse_csv.py", line 6, in toList
with open(file_location_name) as csv_file:
FileNotFoundError: [Errno 2] No such file or directory: '../data.csv'
我当前的项目目录结构如下
Project
|
|--parse_csv.py
|--data.csv
|--directory-test
|
|--import-test.py
我首先想到的是,当我调用open
时,'../data.csv'
是根据 parse_csv.py 文件而不是预期的 import-test相对引用的.py 文件。
我只是想这样做,以便 parse_csv.py 可以导入到任何地方,并且它将尊重调用文件中的相对文件路径。
如果需要进一步说明,请告诉我。我知道我的措辞在这里可能会令人困惑。
为清楚起见进行编辑:目标是仅调用parse_csv.toList()
,并使其接受指向调用它的文件的相对路径的字符串。
答案 0 :(得分:0)
您可以让您的parse_csv.toList函数接受文件对象而不是文件路径。这样,您打开一个文件,将该文件提供给模块,它将起作用。像这样:
import parse_csv
with open('../data.csv') as csvFile:
print(parse_csv.toList(csvFile))
或者您可以在调用List之前将相对路径转换为绝对路径。请参阅How to get an absolute file path in Python。只会增加一行。
答案 1 :(得分:0)
在import-test.py
中,
import os.path
import parse_csv
# to retrieve import-test.py's own absolute path
abs_path = os.path.abspath(__file__)
# its dir_path
dir_path = os.path.dirname(abs_path)
# data.csv's path
csv_path = os.path.join(dir_path, '..', 'data.csv')
# use the path
print(
parse_csv.toList(csv_path)
)