• ベストアンサー

Pythonのopen()が使えません

 Pythonでアカウント作成部分のプログラムを書こうと思い、 画像のようなコードを書いたのですが、ファイルに書き込むこと が出来ません。使用してるPythonのバージョンは3.4.1です。  それと、こういう場合に、ただ登録情報の変数を参照する だけのためにクロージャを使うのは正しいのでしょうか?  ご指導のほど、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

具体的に、どのように「できない」のですか? エラーメッセージは出ませんか? 変数(?)finished が 見あたりません。 finished=False だったら、ループの最後でf.close() した後、そのままの fを使って、whileループの先頭に戻って for line in f: でアクセスするので、正常な動作は期待できません。 finished=Trueだったら、読み書き自体が実行されません。 そもそも、このwhileは必要なのでしょうか? なお、Python3ならopenはwith構文と組合せると便利です。

walk-craftsman
質問者

補足

ごめんなさい。書きかけのID確認コードから流用して、よく確認もしないで質問してしまいました。finishedもwhileもいらないようです。 元々、関数rememberidの部分は f=open('acountfile.txt', 'r', encoding='utf-8') f.write(yourid+',') f.write(yourpassword+'\n') と書いたのですが、これも動作しませんでした。 関数inputidのプロンプトの部分は入力を求められます。 エラーメッセージはここに書いたコードの際も、質問にあげたコードでもでていません。 回答を参考に書き直したコードでもエラーメッセージはありませんでした。 ただ、ファイルに出力された様子もないのです。 どうしたらいいのかわかりません。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

ちょっと落ち着いてください > f=open('acountfile.txt', 'r', encoding='utf-8') モードr では、書き込みはできません。 これが、wやaの間違いだとすると ・カレントディレクトリはどこ?  絶対パスではないので、カレントディレクトリのファイルに書き込まれるはずです。  確認しているファイルと、別なディレクトリにできていませんか?  絶対パスで指定したら動いたりしませんか? ・ファイルやディレクトリの書き込み権限は? ・ちゃんと、書き込み部分を実行してますか?  デバッガや「printデバグ」等で確認する あたりも確認してください。

walk-craftsman
質問者

お礼

 丁寧な返答有難うございます。  コードを確認していたところ、実行文がない事に気づいて 書き加えたところ動作しました。  間抜けな質問で申し訳ありませんでした。  ちなみにrモードは書き込む前の重複確認のためのもので、 下の方の「f.write命令」直前の「open」で-aオプションで 呼び出しているのが書き込みのための処理になります。  これは確認のためのWindows上でのコードで、本来はUbuntu 上で走らせる予定なので、ディレクトリの指定は、ご指導の ように気をつけさせていただきます。  また疑問点などありましたら質問させていただきたく、 その際にもよろしければご助力願います。  有難うございました。

関連するQ&A