从输入类型文件中读取文本文件

时间:2020-03-01 10:22:23

标签: python html flask

我从用户那里可以上传文件。 我正在使用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">

2 个答案:

答案 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