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

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

ただいまの
回答率

87.50%

flaskへのテキストファイルの読み込み

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 583

score 2

flaskへのテキストファイルの読み込みが出来ません。実行すると"そのようなファイルやディレクトリはありません"と表示されます。

bbs.pyというPythonのファイルを作り,同じ階層にarticles.txtを作っています。articles.txtは  "文字列","文字列"  を2行書いただけのファイルです。
とりあえず、自分が書いたコードではテキストファイルを読み込めていないようです。

bbs.pyとarticles.txtを同じ階層において、その階層にtemplatesフォルダを作り、その中にhtmlのファイルを格納しています。

test
|--bbs.py
|--articles.txt
|--templatesフォルダ→htmlファイル(bbs.html , layout.html)

コードは以下の通りです。

bbs.py

from flask import Flask, request, render_template
import codecs

app=Flask(__name__)

@app.route("/")
def bbs():
        message="Hello World"
        file=codecs.open("articles.txt", "r", "utf-8")
        lines=file.readlines()
        file.close()
        return render_template("bbs.html",message=message,lines=lines)

@app.route("/result", methods=["POST"])
def result():
        message="this is paiza"

        article=request.form["article"]
        name=request.form["name"]


        return render_template("bbs.html",message=message,article=article,name=name)

if __name__=="__main__":
    app.run(debug=True, host='0.0.0.0', port=5000)

 

layout.html

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>Flask_test</title>
        <style>body {padding: 10px;}</style>
    </head>
    <body>
        {{ 共通テンプレート }}

        {% block content %}
        {% endblock %}


    </body>
</html>

bbs.html

{% extends "layout.html" %}

{% block content %}
<h1>一行掲示板</h1>
<p>{{ message }}</p>
<form action="/result" method="post">

    <label for="article">投稿</label>
    <input type="text" name="article">
    <p></p>
    <label for="name">名前</label>
    <input type="text" name="name">
    <button type="submit">送信する</button>

</form>

<p>{{ article }}{{ name }}</p>
<h2>投稿一覧</h2>
{% for line in lines: %}
    <p>{{ line.rstrip() }}</p>
{% endfor %}

{% endblock %}

paizaのネット環境でのE-learning用の課題なのですが、私はwindowsでの自分がいつも使用している環境下で実行したところ,それまでの課題では問題なく出来ていたのですが、この課題でエラーとなってしまいました。
個人的にはbbs.pyのファイル読み込みの部分が原因だと思っていますが、どう記述すればよいのか,なぜ実行できないのか知恵を借りれればと思っています。
宜しくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • rtazaki

    2021/04/27 23:39

    正直、この程度で腹立てるぐらいなら、回答なんてしません。ご心配なく。謝らなくても良いので、実行手順とコンソールログを貼ってほしいです。

    testフォルダでpy bbs.pyを叩いた結果、何が表示されていますか?

    キャンセル

  • naokiscottie

    2021/04/27 23:52

    ブラウザの方は以下のようなエラーです。
    FileNotFoundError
    FileNotFoundError: [Errno 2] No such file or directory: 'articles.txt'

    コンソールログはどの部分かわからなかったのですが・・・・
    ファイルが見つからないという内容が含まれている部分をコピーしました。
    File "C:\Users\naoki\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
    File "C:\Users\naoki\Desktop\仕事\flask_practice\test\bbs.py", line 10, in bbs
    file=codecs.open("articles.txt","r","utf-8")
    File "C:\Users\naoki\AppData\Local\Programs\Python\Python39\Lib\codecs.py", line 905, in open
    file = builtins.open(filename, mode, buffering)
    FileNotFoundError: [Errno 2] No such file or directory: 'articles.txt'
    127.0.0.1 - - [27/Apr/2021 23:49:56] "GET /?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 200 -

    キャンセル

  • rtazaki

    2021/04/28 00:09

    修正依頼だとmarkdown使えないので、回答欄に書きます。

    キャンセル

回答 1

checkベストアンサー

+1

与えられた条件で、以下の通りの環境を作成。
[環境]

  • Windows10
  • Python 3.8.2
  • VSCODE

※フォルダが大文字になっているのはtreeコマンドによるもの。

PS C:\work\python> tree test /f
C:\WORK\PYTHON\TEST
│  articles.txt
│  bbs.py
│
└─templates
        bbs.html
        layout.html

[実行手順]

PS C:\work\python> cd test
PS C:\work\python\test> py .\bbs.py      
 * Serving Flask app "bbs" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.     
   Use a production WSGI server instead.
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 310-683-103
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

[ブラウザ]

  • ChromeとEdgeにて確認
一行掲示板
Hello World

投稿 
名前 
 送信する
投稿一覧
"文字列","文字列"

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2021/04/28 08:28

    同じ場所にフォルダ,ファイルを作って試してみました。
    お陰様でうまくいきました。お手数おかけしました。ありがとうございます。

    実行手順もpowershellにて実行したところ動作しました。

    原因が分からなかったため、以前に行っていたようにbbs.pyをvscode環境で開いて直接実行したところ、ブラウザ表示に以前と同じエラーが表示されました。プログラムもファイルも問題ないことを考えると、vscode環境での実行に何か問題があったのだと思います。

    ただ、この度の実行以外は、vscodeで直接実行して問題なく実行できていたことを考えると、何故今回はダメだったんだろうという点がよく分からないです。

    もし、推測できるような原因があれば教えて下さい。
    とりあえず、実行できたので安心しました。ありがとうございます。

    キャンセル

  • 2021/04/28 10:12

    仕事フォルダが日本語だから?当てずっぽうですが。

    pythonに限らずよくある話なので、デスクトップではなく、短めのパスで確認することを推奨します。

    キャンセル

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

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

関連した質問

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