Flask: How to Read a File in Application Root?

My Flask application structure looks like

application_top/
         application/
                    static/
                          english_words.txt
                    templates/
                             main.html
                     urls.py
                     views.py
         runserver.py

When I run the runserver.py, it starts the server at localhost:5000. In my views.py, I try to open the file english.txt as

f = open('/static/english.txt')

It gives error IOError: No such file or directory

How can I access this file?

1

3 Answers

I think the issue is you put / in the path. Remove / because static is at the same level as views.py.

I suggest making a settings.py the same level as views.py Or many Flask users prefer to use __init__.py but I don't.

application_top/
    application/
          static/
              english_words.txt
          templates/
              main.html
          urls.py
          views.py
          settings.py
    runserver.py

If this is how you would set up, try this:

#settings.py
import os
# __file__ refers to the file settings.py 
APP_ROOT = os.path.dirname(os.path.abspath(__file__))   # refers to application_top
APP_STATIC = os.path.join(APP_ROOT, 'static')

Now in your views, you can simply do:

import os
from settings import APP_STATIC
with open(os.path.join(APP_STATIC, 'english_words.txt')) as f:
    f.read()

Adjust the path and level based on your requirement.

2

Here's a simple alternative to CppLearners answer:

from flask import current_app

with current_app.open_resource('static/english_words.txt') as f:
    f.read()

See the documentation here: Flask.open_resource

The flask app also has a property named root_path to resolve the root directory as well as an instance_path property for the particular app directory without requiring the os module, though I like @jpihl's answer.

with open(f'{app.root_path}/static/english_words.txt', 'r') as f:
    f.read()

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Sarah Jenkins

Sarah Jenkins

Senior Technology Editor & AI Specialist

Sarah Jenkins is a veteran tech journalist with over 12 years of experience covering artificial intelligence, mobile innovations, and digital ethics. Her insights have appeared in leading technology publications worldwide.

Share this article
Twitter Facebook Pinterest