Итак, у меня есть личный проект, который, как я знаю, довольно неэффективен, но работает. Я пишу код Python, который выполняет версию tesseract без pip (apt, установленную в Linux). Мой код работает в Linux, но я получаю эту ошибку в Windows:
FileNotFoundError: [WinError 2] Система не может найти файл
указано: 'DRIVE_LETTER:\PROJECT_FOLDER\FOLDER/FILE.txt'
Я использую Atom IDE, новичок в python, поэтому, если кто-нибудь может указать на мои идиотские ошибки, я был бы признателен, спасибо! Ошибка возникает на subprocess.run строка, потому что файл error.txt говорит, что не может найти конкретный путь.
Это мой код:
из flask import Flask,url_for,redirect,render_template,request,send_file
из werkzeug.utils импортировать secure_filename
подпроцесс импорта
приложение = фляга (__имя__)
app.config['UPLOAD_DIRECTORY']="загрузки/"
app.config['ИМЯ_ФАЙЛА']=""
app.config['OUTPUT_DIRECTORY']="текстовый результат/"
app.config['РАСШИРЕНИЕ']=".txt"
@app.route("/",methods=["POST","GET"])
защита to_upload():
ошибка_сообщения = ""
если запрос.метод=="POST":
если запрос.файлы['fileupload']:
f=request.files['fileupload']
имя_файла=secure_filename(f.filename)
app.config['FILE_NAME']=имя файла
f.save(app.config['UPLOAD_DIRECTORY']+имя файла)
вернуть перенаправление (url_for ("process_upload", имя_файла = имя файла))
еще:
err_msg="Файл не выбран!"
вернуть render_template ("index.html", error=err_msg)
@app.route("/upload/<filename>",methods=["POST","GET"])
def process_upload (имя файла):
f1=открыть("журналы/out.txt","w")
f2=открыть("журналы/error.txt","w")
out=subprocess.run([f"tesseract uploads/{имя файла}"+f" textresult/{имя файла}"],shell=True,stdout=f1,stderr=f2)
вернуть перенаправление (url_for ("output_file"))
@app.route("/result/",methods=["GET"])
деф выходной_файл():
вернуть render_template("output.html")
@app.route("/скачать/")
def download_file():
файл=app.config['OUTPUT_DIRECTORY']+app.config['ИМЯ_ФАЙЛА']+app.config['РАСШИРЕНИЕ']
вернуть send_file (файл, as_attachment = True)
если __name__=="__main__":
app.run(host="0.0.0.0",port="2000",debug=True)
РЕДАКТИРОВАТЬ:
Наконец-то заработало! Удалено / в app.config['UPLOAD_DIRECTORY'] и app.config['OUTPUT_DIRECTORY'], так как теперь я использую os.path.join, и это следующие строки для Linux и Windows, с которыми я заставил их работать:
Линукс:
to_convert=os.path.join(app.config['UPLOAD_DIRECTORY'],имя файла)
convert2txt=os.path.join(app.config['OUTPUT_DIRECTORY'],имя файла)
out=subprocess.run(["tesseract %s %s"%(to_convert,convert2txt)],shell=True,stdout=f1,stderr=f2)
Окна:
to_convert=os.path.join(app.config['UPLOAD_DIRECTORY'],имя файла)
convert2txt=os.path.join(app.config['OUTPUT_DIRECTORY'],имя файла)
out=subprocess.run(["tesseract",to_convert,convert2txt],shell=True,stdout=f1,stderr=f2)
Спасибо всем за ваш вклад!