generated from streamlit/streamlit-hello
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Hello.py
80 lines (66 loc) · 2.46 KB
/
Hello.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import streamlit as st
from streamlit.logger import get_logger
from docx import Document
from io import BytesIO
LOGGER = get_logger(__name__)
def process_fasta(fasta_content):
lines = fasta_content.splitlines()
new_content = []
sequence = ""
for line in lines:
if line.startswith(">"):
if sequence:
new_content.append(sequence)
sequence = ""
new_content.append(line)
else:
sequence += line.strip()
if sequence:
new_content.append(sequence)
return "\n".join(new_content)
def read_docx(file_stream):
doc = Document(file_stream)
return "\n".join([paragraph.text for paragraph in doc.paragraphs])
st.title("Clear your fasta file!")
uploaded_file = st.file_uploader("Upload your file in docx format!", type=["docx"])
if uploaded_file is not None:
docx_content = read_docx(uploaded_file)
result = process_fasta(docx_content)
file_format = st.radio("Choose your output format:", ["txt", "docx"])
if file_format == "txt":
if st.button('Download your prepared file in .txt'):
b_stream = BytesIO()
b_stream.write(result.encode())
st.download_button(
label="Download .txt",
data=b_stream,
file_name="clean_fasta.txt",
mime="text/plain"
)
else:
if st.button('Download your prepared file in .docx'):
b_stream = BytesIO()
new_doc = Document()
new_doc.add_paragraph(result)
new_doc.save(b_stream)
st.download_button(
label="Download .docx",
data=b_stream,
file_name="clean_fasta.docx",
mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document"
)
else:
st.markdown(' ')