• ベストアンサー

Pythonのopen()が使えません

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

  • Python
  • 回答数2
  • ありがとう数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

  • pythonのファイルの作り方

    やっ質問と、pythonをインストールできました。 次にpythonのファイルをつくろうとしています。 Webで以下の様な資料を見つけました。 資料:たとえば、「c:\work\ai」のようなフォルダを作成します。 とあるのですが 質問:フォルダは、デスクトップ上に「新規作成」で作ればいいのですか。 資料:つぎに、作成したフォルダにプログラムを記載するためのファイルを作成します。 とあるのですが 質問:このファイルの作り方がわかりません。 pythonの画面上で、コードを作成するのですか。 作り方を、教えてください。 宜しくお願いいたします。  

  • Pythonのreadlineについて

    最近Pythonのプログラミングを始めたのですが、Pythonのプログラミングについて以下のことを行いたいのですが、やり方が分からず困っております。 Pythonで行いこと 1.textファイルに例えば以下のようにいくつかの係数を入力しておきます。 a:0.5, b:0.8, c:0.9 2.上記のテキストファイルを読み込み、pythonの変数a、b、cに値を格納したいと考えています。 色々検索している中でテキストファイルの読み込みはf=open(xxx.txt)で読み込み、各行の読み込みはreadline()というコマンドでできることは分かったのですが、lines=f.readline()とした後、その"line"の中からaが0.5、bが0.8という数字部分だけを切り出してプログラム中の変数に渡す方法が分からない状態です。 皆様のお知恵を拝借いたしたく、宜しくお願いいたします。

  • pythonについて

    私はプログラミングに興味があってmacでpython2.7を使っています。 python2.7でプログラムをファイルを書く方法が分かりません。 また、 python専用の本を持ってるのですが、「test.py」という部分があります。 “テキストエディット”、“AppleScript エディット”で保存するをクリックして 名前を「test、py」にできないのですが「test.py」にする必要はないのでしょうか? どなたかやり方を教えてください。

  • python3.3についての質問です

    python3.3についてお聞きいたします。 「すべてのプログラム」-「Python3.3」-「IDLE(Python GUI)」を立ち上げて、 a=[5,6,7] a[0] と入力し「Enter」で、結果が「5」と正常に表示されます。 「IDLE」の一番上の欄の「File」-「New Window」の画面で上記と同じプログラムを入力し、「File」-「Save」で保存してから、「Run」-「Run Module F5」で実行させますと、 >>> ===========RESTART========== >>> >>> と表示されるだけです。 なぜ「5」と表示出来ないんでしょうか。 同じプログラムをメモ帳で書いて、文字コードを「UTF-8」で保存して、走らせても結果は何も表示しません。 なぜなんでしょうか。ご教授お願いいたします。

  • python 環境変数を設定したい

    プログラムはまったくの初心者です。 pythonでPATHの設定をして完全パスを入力しないでも良いようにしたいのですが、どうすれば良いのでしょうか? コントロールパネルからシステム、詳細設定、環境変数まではいいのですが、その後どう作成すれば良いのかわかりません。 持っている書籍はオライリーの「初めてのpython」です。

  • Pythonのコードself多すぎ読み書きしにくい

    Pythonのクラスには通常class:宣言行直下で作成する「クラス変数」と、__init__()メソッド内で作成するかインスタンス作成後にインスタンス名.変数名で追加作成する「インスタンス変数」があります。 Pythonのクラス変数はJavaのクラスでstatic修飾子を付けて宣言したクラス変数と同じで、そのクラスから作成されたインスタンス全てに同じメモリーを割り当てます。 Pythonのインスタンス変数はインスタンスごとにメモリーが割り当てられるので、Javaの普通の変数(フィールド)のように同一クラス内のすべてのメソッドから参照できますが、参照するたびにいちいち「self.」を付けないといけません。 (例 かなり恣意的ですが。。。インデントはOKWAVEが取ってしまうかもしれせん) class Sample: def __init__(self): self.L = [] # Lは数値のリスト def setList(self, L): self.L = L def exe(self, i1, i2): # L[i1]>0かつL[i2]>0のとき、大きい方から小さい方を引いた # 値に、大きい方を小さい方で累乗した値を加える if self.L[i1] > 0 and self.L[i2]: if self.L[i1] > self.L[i2]: return (self.L[i1] - self.L[i2]) + self.L[i1] ** self.L[i2] else: return (self.L[i2] - self.L[i1]) + self.L[i2] ** self.L[i1] イテレーターを使て同じ処理をループする場合はいいのですが、ループで処理できない複雑な処理が続く場合はこのように「self」だらけになり、コーディングミスが多発し、コードが読みにくいものになります。 「self」を省略してインスタンス変数をメソッドから参照し、コードを読みやすいものにする手段はないのでしょうか? どうぞよろしくお願いします。

  • QGISを外部Pythonで制御したい

    2014.10.17に「QGISのメニューのプラグインにあるPythonコンソールからは動作させる事ができますが、外部のPythonを立ち上げて同様なコードを入力してもNameエラーになってしまいます。PATHの問題かな?と思って変えてみたりはしたのですがうまくいきません。アドバイスをお願いします。1、2ヶ月の初心者です。」と質問しました。 翌日に「OSGeo4Wをご利用であれば、OSGeo4W環境に次の環境変数の設定を追加する必要があります。 set QGIS_PREFIX_PATH=%OSGEO4W_ROOT:\=/%/apps/qgis set PATH=%PATH%;%OSGEO4W_ROOT%\apps\qgis\bin set PYTHONPATH=%OSGEO4W_ROOT%\apps\qgis\python」とのご回答を頂きました。 コマンドプロンプトで、対話形式やbatファイルを作成して実行しましたがうまく動作しません。 それで再度質問させて頂きます。よろしくご教授下さい。 Windows8.1、QGISは2.2.0-Valmiera、Pythonは2.7.8です。ユーザー環境変数のPATHは、C:\Program Files (x86)\QGIS Valmiera\bin;C:\Users\myname\Documents\GIS DataBase;C:\Program Files (x86)\IronPython 2.7;C:\Python27 としています(GIS DataBaseには地図データが入っています。)。Pythonで iface=qgis.utils.iface と入力すると ・・・・NameError: name 'qgis' is not defined と出て次に進めません。コマンドプロンプトで python と入力するとpythonのプロンプトに変わりますし、qgis と入力すると OSGEO4W home is C:\PROGRA~2\QGISVA~1 と短表示が出てQGISが起動します。教えて頂いた環境変数の設定の追加をコマンドプロンプトで対話形式やbatファイルを作成して実行しましたが同じです。よろしくお願い致します。

  • python スクリプトファイルの実行

    プログラム初心者です。 pythonを始めて間もないです。 環境はwindows XPでpython2.6を使っています. IDLEエディタでprint "hello" と記入し、test.pyを作成しました。 保存先はC:\Python26になります。環境変数もコマンドラインでpythonと入力すれば起動してくれるように設定しています。 そこで、コマンドラインにpython test.pyと入力すると、File"<stdin>",line 1 python test.py SyntaxError: invalid syntax と返ってきます。 色々調べてみたのですが解決できず質問させていただきました。 どうかよろしくお願いします

  • Python

    シェルスクリプトやバッチファイル作成時には コマンドの実行結果を返り値(終了コード)で 判定したり、次の処理の分岐に使用したりしますが Pythonではどのようにコマンドの実行結果を 判定するのでしょうか。 OSコマンドであれば、os.system("...")とかで判定出来るとの 記事をみたことあるのですが、Pythonコマンド自身の判定は どのようにするのでしょうか。 Ex) Connect('xx','xxx')であるホストに接続し、  接続出来たかどうかの判定をしたい。

  • Django python

    pythonでdjangoのシステムについてお聞きしたいのですが・・ python0.95バージョンは管理画面からユーザーが追加できないため、manage.pyからshellでユーザ登録をすると教わり、試してみたのですが以下のようなネームエラーがでてしまい、ユーザ登録ができません。 どなたか御存じの方いらっしゃいましたら教えてください。。 >>> user = User.objects.create_user('hogehoge','hoge@ss.jp','456789') Traceback (most recent call last): File "<console>", line 1, in ? NameError: name 'User' is not defined 設定しなくてはいけないファイルがあるのでしょうか? よろしくお願いします。

専門家に質問してみよう