简体   繁体   中英

Error Reading CSV file using Python, Flask

I'm very new to python and flask. I simply wanted to read a CSV file but it's giving me an error of "FileNotFoundError: [Errno 2] No such file or directory: 'Dog-Data.csv'" everytime I try to run run.py

Here are my file order

DD\
    static\
        (bunch of image files)
    templates\
        (bunch of template files)
    __init__.py
    views.py
    Dog-Data.csv

views.py

from flask import render_template
from app import app
import csv

@app.route('/')
@app.route('/Home')
def home():
    return render_template("Home.html",title='Home')

@app.route('/MakeaMatch')
def makeamatch():
    return render_template("MakeaMatch.html",title='Make a Match!')

@app.route('/Game')
def game():
    return render_template("Game.html",title='Game')

@app.route('/ListofDogs')
def listofdogs():
    return render_template("ListofDogs.html",title='List of Dogs')

@app.route('/About')
def about():
    return render_template("About.html", title='About')

@app.route('/Contact')
def contact():
    return render_template("Contact.html", title='Contact')

@app.route('/MatchResult')
def matchresult():
    class DogBreed:
        def __init__(self, br, per, si, lif, hou, cli):
            self.breed = br
            self.personality = per
            self.size = si
            self.lifestyle = lif
            self.housing = hou
            self.climate = cli
            self.match = 0

    #List that will contain class DogBreed
    ListOfBreeds = []

    data_file = open('Dog-Data.csv')
    csv_file = csv.reader(data_file)

    for row in csv_file:
        #print (row) #will print the csv file
        #print (row[2]) #will print element of that row
        dog_breed = DogBreed(row[0],row[1].lower().split(", "),row[2].lower(),row[3].lower(),row[4].lower(),row[5].lower())
        ListOfBreeds.append(dog_breed)

    data_file.close()

    #MORE CODES HERE. OMITTED BECAUSE I DON'T THINK IT'S RELEVANT

    return render_template("MatchResult.html",title='Match Result',posts=ListOfBreeds)

The webpage loads and templates shows up fine if I comment out the lines involving CSV. However, it doesn't of course show the result I want it too.

I've also tried putting the Dog-Data.csv into the static folder and used

data_file = open('static/Dog-Data.csv')

but this didn't work either.

Thanks so much for help.

Have you tried to give the full path instead of just a relative path?

Python sometimes takes the working directory as a "home" path, which might or might not be the same as your view.py is situated in.

ok so really simple mistake that took hours for me to solve. I should be passing it from the root folder which means I should've put

data_file = open('app/Dog-Data.csv')

and now it works. T__T

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM