python应用——将raw文件转化为jpg文件,并显示图像

### Streamlit 文件上传功能详解 在 Streamlit 中,`st.file_uploader` 是用于实现文件上传的核心组件。它允许用户通过图形界面上传各种类型的文件应用程序中。以下是关于如何使用 `st.file_uploader` 的详细介绍以及一些实用示例。 #### 基本语法 `st.file_uploader` 方法可以接收多个参数来定制其行为。最常用的几个参数如下: - **label**: 显示给用户的提示文字。 - **type**: 可选的文件类型列表(例如 ['csv', 'xlsx']),限定用户只能上传指定格式的文件。 - **accept_multiple_files**: 是否允许多文件上传,默认为 False。 当用户成功上传文件后,该方法会返回一个类似于字典的对象,其中包含了文件的相关信息和内容流。 ```python import streamlit as st uploaded_file = st.file_uploader("请选择要上传的文件", type=["txt", "pdf", "png"]) if uploaded_file is not None: bytes_data = uploaded_file.read() st.write(f"文件名: {uploaded_file.name}") st.write(f"文件大小: {len(bytes_data)} 字节") ``` 上述代码展示了如何读取显示已上传文件的基本属性[^3]。 #### 处理不同类型的文件 根据实际需求,可能需要针对特定类型的文件执行不同的操作。下面分别介绍了几种常见场景下的处理方式。 ##### 文本文件 (.txt, .log 等) 对于纯文本文件来说,可以直接将其解码成字符串形式以便进一步分析或展示。 ```python text_file = st.file_uploader("上传文本文件", type="txt") if text_file: content = text_file.getvalue().decode("utf-8") # 将二进制转换为UTF-8编码的字符串 st.text_area("文件内容预览:", value=content[:500], height=200) # 截断部分内容方便查看 ``` ##### 表格数据 (CSV 和 Excel 格式) 利用 Pandas 库加载 CSV 或 XLSX 文件非常简便快捷,且能立即转化为 DataFrame 对象供后续可视化或其他计算任务调用。 ```python import pandas as pd data_file = st.file_uploader("导入数据分析表单", type=["csv", "xlsx"]) if data_file: try: df = pd.read_csv(data_file) if ".csv" in data_file.name else pd.read_excel(data_file) st.dataframe(df.head(10)) # 展现前几行记录作为样例 except Exception as e: st.error(f"解析失败,请确认文件格式正确! 错误详情:{e}") ``` 此处需要注意的是,在尝试打开未知来源的数据之前最好先做异常捕获以免程序崩溃。 ##### 图像资源 (JPEG/PNG/GIF...) 借助 PIL(Pillow) 库可轻松完成图片类素材的操作比如缩放裁剪保存等等动作;另外也可以直接嵌入 HTML img tag 来即时渲染效果出来。 ```python from PIL import Image image_file = st.file_uploader("挑选一张照片吧!", type=["jpg", "jpeg", "png"]) if image_file: img = Image.open(image_file).resize((400, 400)) st.image(img, caption='这是您刚刚分享的照片哦~') ``` 以上片段说明了怎样调整尺寸后再呈现最终成果给访问者看[^4]。 --- ### 综合应用案例 —— 自定义图表生成器 假设我们希望构建这样一个工具:让用户自行提交包含数值型列的一份电子表格文档之后自动绘制对应的折线图或者柱状图之类的统计图形,则整个流程大致如下所示: ```python import plotly.express as px def main(): global fig title = "动态绘图演示平台" description = """ 在这里你可以简单几步就制作属于自己的个性化商业报表啦!\n\n Step 1. 下载模板 -> 修改填充真实业务指标 -> 回传至系统。\n Step 2. 设置偏好样式选项——颜色主题、坐标轴范围等细节设定均可自由调节。\n Step 3. 预览满意即刻导出高清版本PDF/PPT汇报材料咯!""" with open("./assets/example_template.xlsx","rb") as f: btn = st.download_button( label="点击获取空白录入模版", data=f, file_name="sample_input_format.xlsx", mime="application/vnd.ms-excel" ) upload_zone = st.container() chart_type_selection = ["Line Chart", "Bar Plot"] selected_chart_kind = st.selectbox("Pick Your Preferred Graph Type Below.",chart_type_selection) raw_dataset = upload_zone.file_uploader('Upload your dataset here.', accept_multiple_files=False,type=['xls','xlsx']) if raw_dataset: dataframe_representation = process_uploaded_spreadsheet(raw_dataset) draw_interactive_graph(selected_chart_kind,dataframe_representation) @st.cache_resource(show_spinner=True,max_entries=None,ttl=60*60) def process_uploaded_spreadsheet(file_obj): temp_df = pd.DataFrame() try: if '.xls' in str(file_obj.type): temp_df=pd.read_excel(io=file_obj,index_col=None) elif'.xlsx'instr(file_obj.type): temp_df=pd.read_excel(pd.ExcelFile(file_obj),index_col=None,sheet_name=[0])[0] return clean_and_transform(temp_df) except ValueError as ve: raise RuntimeError("Invalid File Format Detected.") from ve def clean_and_transform(dirty_table): cleaned_version = dirty_table.dropna(axis=0,how='all').reset_index(drop=True) transformed_result = ... # Add transformation logic according to project requirements. return transformed_result def draw_interactive_graph(chart_style,dynamic_source): global fig match chart_style.lower(): case "line chart": fig = px.line(dynamic_source,x="Date Column Name Here",y="Value Field Title Goes There") case "bar plot": fig = px.bar(dynamic_source,x="Category Dimension Label",y="Measure Metric Description") st.plotly_chart(fig,width=700,height=500) main() ``` 此脚本实现了从原始资料准备到最后成品发布的全流程自动化管理解决方案. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值