"エラー:ファイルまたはディレクトリは存在しません"しかし、os.listdirによって確認されたものとして存在します

私はディレクトリからいくつかのCSVファイルを読み込み、各ファイルについて分析を行うプログラムを書いています。私はこれらの機能を持っています:

# Function reads in files and saves data into 2 dimensional array
def ReadInFiles(name):
  try:
    data = []
    fname = csv.reader(open(name, 'r'))
    #print 'read in file: ' + str(fname)
    rowCount = 0
    for row in fname:
      if rowCount != 0: # skip headings
        data.append(row)
      rowCount += 1
      #print name + ' ' + str(row) + ' read in successfully \n'                
  except IOError: "Can't read files"


  return data


#Function reads in files in a folder  
def ReadDirectory (dirName):
  try:
    Data = []        
    for files in os.listdir(dirName):
      print '\n FILE: ' + files
      Data = ReadInFiles(files)
      AnalyzeData(Data, daysElapsed, columns = 4)

  except IOError:
      print 'Directory does not exist!'

  return

私がReadDirectory関数を無視してReadInFile関数だけを使用すると完全に動作します(ファイルは問題なく読み込まれます)。ReadDirectoryからReadInFunctionを呼び出すと、IOErrorエラーが発生します。[Errno2] Fileまたはディレクトリが存在しません:logfile.csv os.listdirを使用してディレクトリ内のファイルを一覧表示すると、完全に機能します。

私はソースコードを含むディレクトリ内のサブディレクトリとしてcsvファイルを含むフォルダを持っています。私はソースコードディレクトリにもファイルのコピーを置くとスクリプトが完璧に動作することに気がつきましたが、それらのコピーを削除するとエラーが再び出るようになりました。

私は以前の投稿を検索し、二重スラッシュを試しましたが、/何も動作しません。私はフォルダのアクセス許可をチェックしたが、どちらも役に立ちません。

どんな助けもありがとう!

ありがとうございました。

P.S.私はかなり新しいPythonですので、おそらく私の悪いコードを許してください

1
注意:例外が発生する可能性がある最小限のコードを try/except ブロックで囲むことをお勧めします。
追加された 著者 Rik Poggi,

1 答え

os.listdir() returns bare file names that do not include the name of the directory the files are in.

おそらくあなたは:

 Data = ReadInFiles(os.path.join(dirName, files))

P.S.単一のファイル名を参照するときにファイルが複数の理由は何ですか?

P.P.S.次の except ブロックは何も役に立たず、すべてのエラーを静かに無視します。

except IOError: "Can't read files"
6
追加された