我从用户那里可以上传文件。 我正在使用flask,我想做的是从用户选择上传的文本文件中获取数据。
有什么方法可以读取文本文件中的数据?
我试图打开文件file = open()
,但是后来我意识到我没有路径。
然后,它会读取本地计算机上的文件。
@app.route('/admin',methods=['GET','POST'])
def admin_panel():
if request.method == 'GET':
return render_template('adminpanel.html')
if request.method == 'POST':
email = request.form['email']
file_data = request.files['file']
file_name = secure_filename(file_data.filename)
file_data.save(os.path.join("system","files","text",file_name))
with open("system/files/text/file_name") as f:
file_content = f.read()
print(file_content)
file = File(file_data)
file.read_file_dif()
当然,此代码不起作用。但这就是想法。 任何人都知道如何从输入文件标签读取文本文件?
HTML标记
<label for="myfile">Select a file:</label>
<input type="file" id="myfile" name="file">
答案 0 :(得分:3)
最好的方法是先保存文件,然后阅读以获取文本。按照惯例,您可以使用保存路径设置UPLOAD_FOLDER
变量。然后,在flask中使用以下命令保存文件:
file_path = os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename))
f = request.files['file']
f.save(file_path)
# This would save the file. Now to read simply use the normal way to read files in Python
with open(file_path, 'r') as f:
file_content = f.read()
# Rest of the processing logic
请注意,该路径是相对于您当前工作目录的,该目录通常是项目的根目录。另外,在存储和读取不受信任用户的文件时请小心。
一个更好的存储这些文件的地方应该是项目根目录以外的地方。您可能在某个地方有一个数据目录,可以通过该目录配置Nginx(或任何其他前端代理)来提供上传的文件
答案 1 :(得分:0)
这是我解决问题的方法
from werkzeug.utils import secure_filename
import os
class File():
def __init__(self,file):
self.file = file
def read_file(self):
file_name = secure_filename(self.file.filename)
self.file.save(os.path.join("app", "static", file_name))
with open(f"app/static/{file_name}") as f:
email_list = f.read().splitlines()
return email_list