GmailTrust commited on
Commit
9a2640c
·
verified ·
1 Parent(s): 79d04b1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -59
app.py CHANGED
@@ -6,7 +6,7 @@ import pandas as pd
6
  # Các biến toàn cục
7
  OUTPUT_FILE_TXT = "output.txt"
8
  OUTPUT_FILE_XLSX = "output.xlsx"
9
- TEMP_FILE = "temp.txt" # Biến tạm lưu dữ liệu sau split
10
 
11
  def write_file(file_path, data):
12
  with open(file_path, 'w', encoding='utf-8') as file:
@@ -43,7 +43,7 @@ def split_emails(input_data, uploaded_file):
43
  if match:
44
  gmail_addresses.append(match.group(1) + '\n')
45
 
46
- # Lưu dữ liệu gốc vào biến tạm (không tự xóa)
47
  write_file(TEMP_FILE, [line + '\n' for line in lines])
48
 
49
  output_data = "".join(gmail_addresses)
@@ -75,71 +75,27 @@ def fill_missing_parts(input_data, uploaded_file):
75
  output_total = count_emails(output_data)
76
  return f"Đã lưu kết quả.", gr.update(value=data, label=f"Input Text (Total: {input_total})"), gr.update(value=output_data, label=f"Output Text (Total: {output_total})"), None
77
 
78
- def clear_input(input_data, output_data, uploaded_file):
79
- return "", gr.update(value="", label="Input Text (Total: 0)"), gr.update(value=output_data, label=f"Output Text (Total: {count_emails(output_data)})"), None, "Đã xóa input."
80
-
81
- def clear_output(input_data, output_data, uploaded_file):
82
- if os.path.exists(OUTPUT_FILE_TXT):
83
- os.remove(OUTPUT_FILE_TXT)
84
- if os.path.exists(OUTPUT_FILE_XLSX):
85
- os.remove(OUTPUT_FILE_XLSX)
86
- return "Đã xóa output.", gr.update(value=input_data, label=f"Input Text (Total: {count_emails(input_data)})"), gr.update(value="", label="Output Text (Total: 0)"), None
87
-
88
  def clear_files():
89
  # Chỉ xóa output files, không xóa TEMP_FILE
90
  for file_path in [OUTPUT_FILE_TXT, OUTPUT_FILE_XLSX]:
91
  if os.path.exists(file_path):
92
  os.remove(file_path)
93
- return "Đã xóa các file output.", gr.update(value="", label="Input Text (Total: 0)"), gr.update(value="", label="Output Text (Total: 0)"), None, None
94
-
95
- def download_output(input_data, output_data, uploaded_file):
96
- if not output_data:
97
- if os.path.exists(OUTPUT_FILE_TXT):
98
- os.remove(OUTPUT_FILE_TXT)
99
- if os.path.exists(OUTPUT_FILE_XLSX):
100
- os.remove(OUTPUT_FILE_XLSX)
101
- return "Không có dữ liệu để tải.", gr.update(label=f"Input Text (Total: {count_emails(input_data)})"), gr.update(label=f"Output Text (Total: {count_emails(output_data)})"), None
102
-
103
- write_file(OUTPUT_FILE_TXT, output_data.splitlines(keepends=True))
104
-
105
- lines = output_data.splitlines()
106
- data_rows = []
107
- for line in lines:
108
- if line.strip():
109
- separator = re.search(r'[\t|;:]', line)
110
- if separator:
111
- sep_char = separator.group()
112
- parts = line.strip().split(sep_char)
113
- data_rows.append([part.strip() for part in parts])
114
- else:
115
- data_rows.append([line.strip()])
116
-
117
- df = pd.DataFrame(data_rows)
118
- df.to_excel(OUTPUT_FILE_XLSX, index=False, header=False)
119
-
120
- return ("Đã tạo file output.txt và output.xlsx.",
121
- gr.update(label=f"Input Text (Total: {count_emails(input_data)})"),
122
- gr.update(label=f"Output Text (Total: {count_emails(output_data)})"),
123
- [OUTPUT_FILE_TXT, OUTPUT_FILE_XLSX])
124
 
125
- # Giao diện Gradio
126
  with gr.Blocks(title="Email Processor Pro", theme=gr.themes.Soft()) as demo:
127
  with gr.Row(equal_height=True):
128
  with gr.Column(scale=1):
129
  input_text = gr.Textbox(label="Input Text", lines=10,
130
- placeholder="Nhập dữ liệu hoặc tải file .txt lên...\nĐịnh dạng hỗ trợ: email|data hoặc email;data hoặc email:data hoặc email<tab>data")
131
- with gr.Row():
132
- upload_file = gr.File(label="📤 Upload File (.txt)", file_types=[".txt"])
133
- with gr.Row():
134
- clear_input_btn = gr.Button("🧹 Clear Input")
135
 
136
  with gr.Column(scale=1):
137
  output_text = gr.Textbox(label="Output Text", lines=10, interactive=False)
138
- with gr.Row():
139
- download_file = gr.File(label="📥 Download Files", interactive=False, file_count="multiple")
140
- with gr.Row():
141
- clear_output_btn = gr.Button("🧹 Clear Output")
142
- download_btn = gr.Button("💾 Download Output")
143
 
144
  status = gr.Textbox(label="🔄 Status", interactive=False)
145
 
@@ -149,15 +105,14 @@ with gr.Blocks(title="Email Processor Pro", theme=gr.themes.Soft()) as demo:
149
  split_btn = gr.Button("✂️ Split Emails")
150
  fill_btn = gr.Button("🔍 Fill Missing")
151
 
152
- with gr.Row():
153
- clear_files_btn = gr.Button("🧹 Clear All Data", size="lg")
154
 
155
  # Kết nối sự kiện
156
  split_btn.click(split_emails, inputs=[input_text, upload_file], outputs=[status, input_text, output_text, download_file])
157
  fill_btn.click(fill_missing_parts, inputs=[input_text, upload_file], outputs=[status, input_text, output_text, download_file])
158
- clear_files_btn.click(clear_files, outputs=[status, input_text, output_text, download_file, upload_file])
159
- clear_input_btn.click(clear_input, inputs=[input_text, output_text, upload_file], outputs=[input_text, input_text, output_text, upload_file, status])
160
- clear_output_btn.click(clear_output, inputs=[input_text, output_text, upload_file], outputs=[status, input_text, output_text, download_file])
161
  download_btn.click(download_output, inputs=[input_text, output_text, upload_file], outputs=[status, input_text, output_text, download_file])
162
 
163
  demo.launch()
 
6
  # Các biến toàn cục
7
  OUTPUT_FILE_TXT = "output.txt"
8
  OUTPUT_FILE_XLSX = "output.xlsx"
9
+ TEMP_FILE = "temp.txt" # File tạm lưu dữ liệu gốc
10
 
11
  def write_file(file_path, data):
12
  with open(file_path, 'w', encoding='utf-8') as file:
 
43
  if match:
44
  gmail_addresses.append(match.group(1) + '\n')
45
 
46
+ # Ghi đè dữ liệu gốc vào file temp.txt
47
  write_file(TEMP_FILE, [line + '\n' for line in lines])
48
 
49
  output_data = "".join(gmail_addresses)
 
75
  output_total = count_emails(output_data)
76
  return f"Đã lưu kết quả.", gr.update(value=data, label=f"Input Text (Total: {input_total})"), gr.update(value=output_data, label=f"Output Text (Total: {output_total})"), None
77
 
 
 
 
 
 
 
 
 
 
 
78
  def clear_files():
79
  # Chỉ xóa output files, không xóa TEMP_FILE
80
  for file_path in [OUTPUT_FILE_TXT, OUTPUT_FILE_XLSX]:
81
  if os.path.exists(file_path):
82
  os.remove(file_path)
83
+ return "Đã xóa các file output.", gr.update(value="", label="Input Text (Total: 0)"), gr.update(value="", label="Output Text (Total: 0)"), None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
 
85
+ # Giao diện Gradio (chỉ giữ lại 2 tab chính)
86
  with gr.Blocks(title="Email Processor Pro", theme=gr.themes.Soft()) as demo:
87
  with gr.Row(equal_height=True):
88
  with gr.Column(scale=1):
89
  input_text = gr.Textbox(label="Input Text", lines=10,
90
+ placeholder="Nhập dữ liệu hoặc tải file .txt lên...")
91
+ upload_file = gr.File(label="📤 Upload File (.txt)", file_types=[".txt"])
92
+ clear_input_btn = gr.Button("🧹 Clear Input")
 
 
93
 
94
  with gr.Column(scale=1):
95
  output_text = gr.Textbox(label="Output Text", lines=10, interactive=False)
96
+ download_file = gr.File(label="📥 Download Files", interactive=False, file_count="multiple")
97
+ clear_output_btn = gr.Button("🧹 Clear Output")
98
+ download_btn = gr.Button("💾 Download Output")
 
 
99
 
100
  status = gr.Textbox(label="🔄 Status", interactive=False)
101
 
 
105
  split_btn = gr.Button("✂️ Split Emails")
106
  fill_btn = gr.Button("🔍 Fill Missing")
107
 
108
+ clear_files_btn = gr.Button("🧹 Clear All Data", size="lg")
 
109
 
110
  # Kết nối sự kiện
111
  split_btn.click(split_emails, inputs=[input_text, upload_file], outputs=[status, input_text, output_text, download_file])
112
  fill_btn.click(fill_missing_parts, inputs=[input_text, upload_file], outputs=[status, input_text, output_text, download_file])
113
+ clear_files_btn.click(clear_files, outputs=[status, input_text, output_text, download_file])
114
+ clear_input_btn.click(lambda: ["", gr.update(value="", label="Input Text (Total: 0)"), gr.update(value="", label="Output Text (Total: 0)"), None, "Đã xóa input."], outputs=[input_text, input_text, output_text, upload_file, status])
115
+ clear_output_btn.click(clear_files, outputs=[status, input_text, output_text, download_file])
116
  download_btn.click(download_output, inputs=[input_text, output_text, upload_file], outputs=[status, input_text, output_text, download_file])
117
 
118
  demo.launch()