我的程序中有这样的东西: 名为“OpenFileinaModule”的文件夹中的主脚本main.py。其中有一个名为“sub”的文件夹,其中包含一个名为subScript.py的脚本和一个由subScript.py打开的文件xlFile.xlsx。
OpenFileinaModule/
main.py
sub/
__init__.py (empty)
subScript.py
xlFile.xlsx
以下是代码:
sub.Script.py:
import os, openpyxl
class Oop:
def __init__(self):
__file__='xlFile.xlsx'
__location__ = os.path.realpath(
os.path.join(os.getcwd(), os.path.dirname(__file__)))
print os.path.join(__location__, __file__)
self.wrkb = openpyxl.load_workbook(os.path.join(__location__,
__file__),read_only=True)
main.py:
import sub.subScript
objt=sub.subScript.Oop()
当我执行main.py时,我收到错误:
IOError: [Errno 2] No such file or directory: 'C:\\Users\\...\\OpenFileInaModule\\xlFile.xlsx'
它跳转子文件夹... 我试过了
__file__='sub/xlFile.xlsx'
但是“sub”文件夹是重复的:
IOError: [Errno 2] No such file or directory: 'C:\\Users\\...\\OpenFileInaModule\\sub\\sub/xlFile.xlsx'
如何使用main.py中的subScript.py打开xlFile.xlsx?
答案 0 :(得分:1)
请避免使用__file__
和__location__
来命名变量,这些更像内置变量,可能会导致混淆。
请注意:
__location__ = os.path.realpath(
os.path.join(os.getcwd(), os.path.dirname(__file__)))
您尚未包含sub
目录,上述内容仅加入CWD + os.path.dirname(__file__)
。这不会让你到达文件。请阅读os.path.dirname
的文档:os.path.dirname(__file__)
在此处返回一个空字符串。
def __init__(self):
file = 'xlFile.xlsx'
location = os.path.join('sub', file)
location = os.path.abspath(location) # absolute path to file
location = os.path.realpath(location) # rm symbolic links in path
self.wrkb = openpyxl.load_workbook(location)
答案 1 :(得分:0)
你用__file__
覆盖__file='xlFile.xlsx'
,你的意思是这样做吗?
我想你想要像
这样的东西import os
fname = 'xlFile.xlsx'
this_file = os.path.abspath(__file__)
this_dir = os.path.dirname(this_file)
wanted_file = os.path.join(this_dir, fname)
我建议总是使用文件的绝对路径,特别是当你在Windows上时,如果文件在不同的驱动器上,相对路径可能没有意义(我实际上不知道它会做什么,如果你问它设备之间的相对路径。)