2017-07-11 17 views
1

私のプログラムでは次のようなことがあります: メインスクリプトmain.pyは、 'OpenFileinaModule'という名前のフォルダ内にあります。 subScript.pyという名前のスクリプトと、subScript.pyによって開かれたxlFile.xlsxというファイルがあるフォルダの中に 'sub'というフォルダがあります。ここでPython - モジュール内のファイルを開くには?

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' 

を試みた。しかし、その後、 "サブ" フォルダが重複している ...サブフォルダをジャンプ:

IOError: [Errno 2] No such file or directory: 'C:\\Users\\...\\OpenFileInaModule\\sub\\sub/xlFile.xlsx' 

subScript.pyでxlFile.xlsxを開く方法main.pyから

答えて

0

__file____file='xlFile.xlsx'で上書きしていますか。これはどういう意味ですか?


は、私はあなたがいる場合、相対パスは意味を持たない可能性がある場合は、Windowsにしている場合は特に、私は、ファイルの絶対パスを使用して、常にお勧めしたい

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) 

ような何かをしたいと思いますファイルは別のドライブにあります(実際にはデバイス間の相対パスを求めた場合、どうなるか分かりません)。

+1

これは私が探していたものです。 これは一般的なことですか? –

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) 
関連する問題