2016-04-23 15 views
0

割り当てのためにデータベースをアップロードする予定ですが、問題が発生しています。これらは命令です:Python IOError、ディレクトリ内のファイルが見つかりません

このアプリケーションは、(mbox.txt)メールボックスのデータを読み込みます維持するために、次のスキーマを使用したデータベースを使用して、組織ごとの 数の電子メールメッセージ(メール アドレスのすなわちドメイン名)をカウントアップ がカウントされます。あなたはmbox.txtに プログラムを実行している

CREATE TABLEカウントが(org TEXTcount INTEGER) グレーディングのために上記の結果のデータベースファイルをアップロードします。テストで複数回プログラムを実行する場合、または異なるファイル で実行する場合は、実行する前に必ずデータを空にしてください。

このアプリケーションのデータファイルは、前の の割り当て:http://www.pythonlearn.com/code/mbox.txtと同じです。

サンプルコードは UPDATEステートメントを使用して、各レコードをループで読まれるように、データベースへ 結果をコミットしているので、それ は、すべてのデータを処理するために、数分かかることがあります。 コミットは、 が呼び出されるたびにすべてのデータをディスクに完全に書き込むことを要求します。それは私を送信し続けること

エラーメッセージは次のとおりです。

Traceback (most recent call last): 
    File "<pyshell#11>", line 1, in <module> 
    fh = open(fname) 
IOError: [Errno 2] No such file or directory: 'mbox.txt' 

私は同じフォルダに両方それらを救いました。

誰でもこの手伝いできますか?

私が入力したコードは、あなたのコードがmbox.txtというファイルを探し、それを見つけていないhere

+0

説明書には、「このコードをアプリケーションの開始点として使用することもできます:[http://www.pythonlearn.com/code/emaildb.py] [1]」 – nk55

+0

コードを保存したディレクトリからコードを実行していますか? – tijko

+0

まず、どの言語でも学ぶと思うのは、エラーメッセージを読むことです。あなたのコードは、 'mbox.txt'という名前のファイルを見つけることができません。 –

答えて

0

ファイルmbox.txtを検索する際に問題が発生しました。まだ実行していないので、データベース内には何も持っていません。

良い練習(少なくとも開発中)は、あなたが 希望が本当であることを確認することです。この目的のために、次のコード を使用して、ファイルが実際に存在することを確認します。

import os.path 

fname = "mbox.txt" 

assert os.path.exists(fname), "The file shall exist" 

あなたが状況でコードを実行するために起こる場合は、ファイルが存在しない、それは何が悪かったのかを伝える AssertionErrorを投げます。

この例外は、仮定が成立していないことをすぐに教えてくれるので非常に実用的です。 あなたは何を修正すべきかを知っています。

0

です。私の推測では、open(fname)は現在のディレクトリでmbox.txtを探していますが、コードは別のディレクトリから実行されています。

import os 

# figure out directory of the Python file 
mdir = os.path.dirname(os.path.abspath(__file__)) 

# assuming that mbox.txt is in the same folder as the Python file, 
# get the path to that file 
mpath = os.path.join(mdir, 'mbox.txt') 

# open the file 
with open(mpath, 'r') as fh: 
    # ... 

別のアプローチは、コマンドライン引数を使用している。このような

何かがあなたの問題を解決するのに役立つかもしれません。おそらく、あなたが協力したいと思う他のファイルmbox.txtがあります。

import argparse 

argp = argparse.ArgumentParser(description='foo the mbox') 
argp.add_argument('mbox_path', help='Path to mbox file') 

opts = argp.parse_args() 

with open(opts.mbox_path, 'r') as fh: 
    # ... 

それとも手の込んだ取得し、argparse.add_argumenttype引数にargparse.FileTypeを使用します。これらの例では、コマンドラインオプションとしてmbox.txtへのパスを受け入れることができます。

関連する問題