【发布时间】:2017-09-06 20:51:43
【问题描述】:
我正在尝试构建一个应用程序,它采用具有不同列数的不同 CSV 文件。例如,我的 CSV 文件有大约 30 列,其字段名称具有特殊字符。所以,我想更新用户给出的字段名称。我有一个 CSV 文件,看起来像这样:
ques.1,ques.2
3,5
5,1
我想用用户(电视、广播)给出的标题更新列名ques.1, ques.2。
Python:
def upload():
if request.method == 'POST':
# check if the post request has the file part
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
# if user does not select file, browser also
# submit a empty part without filename
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
app.logger.info('File Saved')
filename = secure_filename(file.filename)
savepath = os.path.join(app.config['UPLOAD_FOLDER'], filename)
flash(savepath)
file.save(savepath)
save_in(savepath)
return redirect(url_for('upload', filename=filename))
return render_template('pages/placeholder.upload.html')
def save_in(savepath):
app.logger.info(savepath)
csv_rows = []
with open(savepath) as csvfile:
reader = csv.DictReader(csvfile)
title = reader.fieldnames
for row in reader:
csv_rows.extend([{title[i]:row[title[i]] for i in range(len(title))}])
我尝试在选择菜单中填充字段名称。但我无法弄清楚如何让用户:
- 从选择菜单中选择要更新的字段名称。
- 输入新的字段名称。
- 单击“更新”按钮更改字段名称。
HTML
<div class="container">
<form class="col s12" action="/upload" method="POST" enctype="multipart/form-data">
<div class="row">
<div class="input-field col s12 m6">
<label>Update Fieldnames</label>
<select class="icons">
{% for x in title %}
<option value="{{ x }}"{% if loop.first %} SELECTED{% endif %}>{{ x }}</option>
{% endfor %}
</select>
<button class="btn" type="submit" value="Update">Submit</button>
</div>
</div>
</form>
</div>
【问题讨论】:
-
我认为你有更好的选择来绘制标签(字段名称)和文本输入(新字段名称),而不是选择部分,它会更容易处理,也更方便为用户
-
我将使用具有不同列数的不同 CSV 文件,因此,我不确定需要多少标签和文本输入。我认为提供一个选择菜单会是一个更好的主意,并且每次都更新它。
-
在
for循环中,您可以在一行中绘制一个标签和一个输入,就像您为选择菜单的一个选项所做的那样。也许您有更简单的想法从用户那里获得新标题? -
你能告诉我一个例子来说明如何做到这一点,在得到文本输入后如何处理它?
-
嗨@PRMoureu 由于一些健康问题,我无法试用您之前发布的代码。如果您能重新发布代码,将不胜感激?
标签: python html csv flask jinja2