質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.74%

  • Python

    6805questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

python ファイルの書き込み、読み込み時のことで。。。

解決済

回答 3

投稿

  • 評価
  • クリップ 1
  • VIEW 173

gontaros0302

score 6

参考書を見ながら学んでいるのですが、ファイル操作のところで詰まってしまいました。
下のコードは参考書をほぼほぼ写したものなのですが、、

os.path.join("Users","Name","st.txt")

my_list = []


with open("st.txt", "w") as f:#as fとするのは拡張子がtxtだから?
    f.write("Hi from Python")

with open("st.txt", "r") as f:
    my_list.append(f.read())

print(my_list)

僕の解釈では、

os.path.join関数でパスを組み立て、st.txtのファイルを作成

st.txtに"Hi from Python"と書き込み、それを変数fに入れて扱いやすいようにする

readメソッドはファイルを開いた後1回しか使えないからlistに入れておく

という感じなのですが、何がどのように動いているのかが今一つイメージできていません。
またタイトルにも書きましたが、as fとして変数fにファイルオブジェクトをなぜ割り当てたのか(初歩的な質問かもしれませんが)もご教示いただければと思います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

実はこんな感じで書けます。

f = open("st.txt", "w")
f.write("Hi from Python")
f.close()

withはブロックを抜けるとき、勝手にcloseしてくれる糖衣構文という認識で問題ありません。

もう少し詳しく知りたいです! ということであれば、検索したら上の方にこんな記事が出てきました。

with構文とは何なのか - 年中アイス

でも、これを理解するのは中級者以上でないとなかなかしんどいと思うので、わからなくても良いです。いずれ振り返ったときに「ああ、そういうことだったんだ」ってなれば良いような話題です、これは。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/07 17:34

    ありがとうございます😊
    リンクまで、本当助かります!

    キャンセル

+1

with open("st.txt", "w") as f:
    # ↑st.txtを「w:書込みモード」で開く。
    # ↑開いた後、書込みをする必要があるので、
    # ↑対象を「f」という変数に保持する。
    # ↑「st.txtに書きこむ」という処理は「fに書き込む」ことになる。

    f.write("Hi from Python")
    # ↑文字列を「fに書き込む」。

with open("st.txt", "r") as f:
    # ↑st.txtを「r:読込みモード」で開く。
    # ↑開いた後、ファイルの内容を読む必要があるので、
    # ↑対象を「f」という変数に保持する。
    # ↑「st.txtの内容を読む」という処理は「fを読む」ことになる。

    my_list.append(f.read())
    # ↑「fを読んだ結果」は「f.read()」で得られる文字列。
    # ↑その文字列をlistに追加している。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/07 17:36

    ご丁寧にありがとうございます😊

    キャンセル

+1

処理のフローとしては

#ファイルのパスを生成
#(文字列を生成しているだけなのでファイルは作っていないのでは?)
os.path.join("Users","Name","st.txt")

my_list = []

#ファイルを操作するオブジェクトに「f」という名前を付けてst.txtファイルを開く
with open("st.txt", "w") as f:
    #ファイルに書き込む
    f.write("Hi from Python")
#ファイルを閉じる(withステートメント通過で自動で閉じられる)

#ファイルを操作するオブジェクトに「f」という名前を付けてst.txtファイルを開く
with open("st.txt", "r") as f:
    #ファイルを読み込んだ結果を変数に格納
    my_list.append(f.read())
#ファイルを閉じる


print(my_list)

with構文についてはこちら
Pythonでwith構文を使う方法【初心者向け

fとした理由は単にfileの頭文字だからだと思います。

また、2つのfは、同じfという名前でも別のものとして処理されます。
なので

with open("st.txt", "w") as writer:
     writer.write("Hi from Python")

with open("st.txt", "r") as reader:
    my_list.append(reader.read())

としても動作すると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/07 17:35

    なるほど、その都度箱に入れて渡し、箱から中身を出すということですね。ありがとうございます😊

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.74%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    6805questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。