Python - 如何在模块中打开文件?

时间:2017-07-11 17:01:51

标签: python openpyxl

我的程序中有这样的东西: 名为“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?

2 个答案:

答案 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上时,如果文件在不同的驱动器上,相对路径可能没有意义(我实际上不知道它会做什么,如果你问它设备之间的相对路径。)