如何在烧瓶中正确读取文件

时间:2016-06-24 01:03:55

标签: python flask

我想将一个列表传递给Jinja,它可以迭代并填充select字段的值。我正在努力构建正确的列表,用于正确填充选择字段。

我拥有的数据是我从文本文件中读取的字符串列表。文本文件中的数据采用以下格式。

['Afghanistan', 'Albania', 'Algeria']

我想在jinja模板中迭代这些元素并填充下拉列表。我的jinja模板看起来像这样

<select name="country">
   {% for country in countryList %}    
      <option value="">{{country}}</option>
   {% endfor %}
</select>

我尝试过这样的东西来读取文件

with open(filename, 'r') as f:        
        data_list = f.read().replace('\n', ' ')
country_list = zip(data_list )

return render_template('signup.html', countryList= country_list)

但是在jinja中,一次只读一个字符。 我试过这个

lines = tuple(open(filename, 'r'))

但这并没有解决问题。在选择字段中,我只看到&#39; [&#39;

我尝试过的其他事情

with open(filename, 'r') as f:        
        array = []
        for line in f:
            array.append(line)


with open(filename, 'r') as f: 
     data_list = []       
     data_list = f.read().replace('\n', ' ')

据我所知,这不是Jinja或烧瓶问题。但不确定如何从文本文件中正确读取数据,以便它是一个列表。有什么我可以尝试可能表明文本文件的问题?

2 个答案:

答案 0 :(得分:0)

data_liststring所以迭代器遍历每个字符。要获取列表,您可以运行eval(data_list),尽管这可能不安全。您应该以不同的方式构造文本文件,并在值之间使用某些分隔符,然后您可以将data_list设置为f.read().split('\n'),例如,如果每个值都由换行符断开,即:

Afghanistan
Albania
Algeria

答案 1 :(得分:0)

将输入文件的格式更改为:

Afghanistan
Albania
Algeria

然后您的代码变为:

with open(filename, 'r') as f:        
    country_list = [line.strip() for line in f]

return render_template('signup.html', countryList= country_list)

然后您的模板文件无需更改即可使用。