ahalamora commited on
Commit
5b2093c
·
1 Parent(s): 5163f47

Upload 3 files

Browse files
Files changed (3) hide show
  1. app.py +93 -0
  2. doc_process.py +180 -0
  3. requirements.txt +4 -0
app.py ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import os
3
+ import shutil
4
+ import zipfile
5
+ from zipfile import ZipFile
6
+
7
+ from doc_process import doc_process
8
+
9
+
10
+ extract_folder = 'documents'
11
+
12
+ def recode(raw: str) -> str:
13
+ '''
14
+ 编码修正
15
+ '''
16
+
17
+ try:
18
+ return raw.encode('cp437').decode('utf-8')
19
+
20
+ except:
21
+ return raw.encode('utf-8').decode('utf-8')
22
+
23
+ def zip_extract_all(src_zip_file: ZipFile, target_path: str) -> None:
24
+
25
+ # 遍历压缩包内所有内容,创建所有目录
26
+ for file_or_path in file.namelist():
27
+
28
+ print(file_or_path)
29
+
30
+ # 若当前节点是文件夹
31
+ if file_or_path.endswith('/'):
32
+ try:
33
+ # 基于当前文件夹节点创建多层文件夹
34
+ os.makedirs(os.path.join(target_path, recode(file_or_path)))
35
+ except FileExistsError:
36
+ # 若已存在则跳过创建过程
37
+ pass
38
+
39
+ # 否则视作文件进行写出
40
+ else:
41
+ pass
42
+
43
+ # 遍历压缩包内所有内容,解压文件
44
+ for file_or_path in file.namelist():
45
+
46
+ print(file_or_path)
47
+
48
+ # 若当前节点是文件夹
49
+ if file_or_path.endswith('/'):
50
+ pass
51
+
52
+ # 否则视作文件进行写出
53
+ else:
54
+ # 利用shutil.copyfileobj,从压缩包io流中提取目标文件内容写出到目标路径
55
+ with open(os.path.join(target_path, recode(file_or_path)), 'wb') as z:
56
+ # 这里基于Zipfile.open()提取文件内容时需要使用原始的乱码文件名
57
+ shutil.copyfileobj(src_zip_file.open(file_or_path), z)
58
+
59
+ st.title('起诉书 & 委托书 - 自动处理程序')
60
+
61
+ st.markdown('#### 请上传ZIP压缩文件:')
62
+
63
+ # 添加一个文件上传组件
64
+ uploaded_file = st.file_uploader("选择要上传的文件", type=["zip"])
65
+
66
+ # 如果有文件上传
67
+ if uploaded_file:
68
+ # 保存上传的ZIP文件到本地临时目录
69
+ with open("temp.zip", "wb") as f:
70
+ f.write(uploaded_file.read())
71
+
72
+ # 创建文档目录
73
+ os.makedirs(extract_folder, exist_ok=True)
74
+
75
+ # 解压ZIP文件中的文件并处理文件名和内容
76
+ with zipfile.ZipFile("temp.zip", "r") as file:
77
+ # for file_or_path in file.namelist():
78
+ # print(file_or_path, ' -------> ' , recode(file_or_path))
79
+ zip_extract_all(file, extract_folder)
80
+
81
+ # 显示解压缩完成的消息
82
+ st.success(f"ZIP文件已成功解压缩到目录 {extract_folder}")
83
+ input_folder = os.listdir(extract_folder)[0] if os.listdir(extract_folder)[0] != 'output' else os.listdir(extract_folder)[1]
84
+ print(input_folder)
85
+
86
+ # 删除临时文件
87
+ os.remove("temp.zip")
88
+
89
+ if st.button('自动处理并压缩成文件'):
90
+ input_path = os.path.join(extract_folder, input_folder)
91
+ output_path = os.path.join(extract_folder, 'output')
92
+ result = doc_process(input_path=input_path, output_path=output_path)
93
+ st.markdown(result)
doc_process.py ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pandas as pd
3
+ from docx import Document
4
+ from docx.shared import Pt
5
+ from docx.oxml.ns import qn
6
+
7
+
8
+ def doc_process(input_path, output_path):
9
+
10
+ qsz_folder = os.path.join(input_path, '起诉状')
11
+ wts_folder = os.path.join(input_path, '委托书')
12
+ info_path = os.path.join(input_path, 'info.xlsx')
13
+
14
+ qsz_output_shex = os.path.join(output_path, '起诉状_上海耳序')
15
+ qsz_output_fjzy = os.path.join(output_path, '起诉状_福建智云')
16
+ qsz_output_hnsx = os.path.join(output_path, '起诉状_海南申信')
17
+
18
+ wts_output_shex = os.path.join(output_path, '委托书_上海耳序')
19
+ wts_output_fjzy = os.path.join(output_path, '委托书_福建智云')
20
+ wts_output_hnsx = os.path.join(output_path, '委托书_海南申信')
21
+
22
+ phone_wanglei = '18916935832'
23
+ phone_zhangliren = '13817213203'
24
+
25
+ qsz_file_list = os.listdir(qsz_folder)
26
+ wts_file_list = os.listdir(wts_folder)
27
+
28
+ if not os.path.exists(os.path.join(output_path)):
29
+ os.mkdir(os.path.join(output_path))
30
+
31
+ if not os.path.exists(qsz_output_shex):
32
+ os.mkdir(qsz_output_shex)
33
+
34
+ if not os.path.exists(qsz_output_fjzy):
35
+ os.mkdir(qsz_output_fjzy)
36
+
37
+ if not os.path.exists(qsz_output_hnsx):
38
+ os.mkdir(qsz_output_hnsx)
39
+
40
+ if not os.path.exists(wts_output_shex):
41
+ os.mkdir(wts_output_shex)
42
+
43
+ if not os.path.exists(wts_output_fjzy):
44
+ os.mkdir(wts_output_fjzy)
45
+
46
+ if not os.path.exists(wts_output_hnsx):
47
+ os.mkdir(wts_output_hnsx)
48
+
49
+ df = pd.read_excel(info_path)
50
+
51
+ num_shex = 0
52
+ num_fjzy = 0
53
+ num_hnsx = 0
54
+
55
+ # 改管辖法院,并存到对应融担公司的目录中
56
+ for qsz_file in qsz_file_list:
57
+
58
+ # 读取起诉状文件
59
+ qsz_path = os.path.join(qsz_folder, qsz_file)
60
+
61
+ # 加载Docx文件
62
+ doc = Document(qsz_path)
63
+
64
+ # 从文件名获取合同号
65
+ contract_id = qsz_file.split('_')[1]
66
+
67
+ # 从表格中找到对应合同号的管辖法院
68
+ court = df[df['合同号']==contract_id]['管辖法院'].tolist()[0]
69
+
70
+ # 将正确的管辖法院更新到Docx中(加run设置字体)
71
+ doc.paragraphs[-6].text = ''
72
+ run = doc.paragraphs[-6].add_run(court)
73
+ run.font.name = "Arial"
74
+ run._element.rPr.rFonts.set(qn('w:eastAsia'),'宋体')
75
+
76
+ # 调整字体大小
77
+ font = doc.paragraphs[-6].style.font
78
+ font.size = Pt(14)
79
+
80
+ # 判断担保公司
81
+ if '福建智云' in df[df['合同号']==contract_id]['融担公司'].tolist()[0]:
82
+ output_folder = qsz_output_fjzy
83
+ num_fjzy += 1
84
+ elif '海南申信' in df[df['合同号']==contract_id]['融担公司'].tolist()[0]:
85
+ output_folder = qsz_output_hnsx
86
+ num_hnsx += 1
87
+ else:
88
+ output_folder = qsz_output_shex
89
+ num_shex += 1
90
+
91
+ # 保存文件到对应目录
92
+ output_path = os.path.join(output_folder, qsz_file)
93
+ doc.save(output_path)
94
+
95
+ # 改律师名字和电话,并存到对应融担公司的目录中
96
+ for wts_file in wts_file_list:
97
+
98
+ # 读取委托书文件
99
+ wts_path = os.path.join(wts_folder, wts_file)
100
+
101
+ # 加载Docx文件
102
+ doc = Document(wts_path)
103
+
104
+ # 从文件名获取合同号
105
+ contract_id = wts_file.split('_')[1]
106
+
107
+ # 从表格中找到对应合同号的管辖法院
108
+ lawyer = df[df['合同号']==contract_id]['承办律师'].tolist()[0]
109
+ user = df[df['合同号']==contract_id]['用户姓名'].tolist()[0]
110
+
111
+ # 替换律师和电话
112
+ if lawyer != '王磊':
113
+ for p in doc.paragraphs:
114
+ if '王磊' in p.text and user not in p.text:
115
+ text_new_name = p.text.replace('王磊', '张立人')
116
+ p.text = ''
117
+ # 加run用于修改字体
118
+ run = p.add_run(text_new_name)
119
+ run.font.name = "Arial"
120
+ run._element.rPr.rFonts.set(qn('w:eastAsia'),'宋体')
121
+ # 调整字体
122
+ font = p.style.font
123
+ font.size = Pt(14)
124
+
125
+ if phone_wanglei in p.text:
126
+ text_new_phone = p.text.replace(phone_wanglei, phone_zhangliren)
127
+ p.text = ''
128
+ # 加run用于修改字体
129
+ run = p.add_run(text_new_phone)
130
+ run.font.name = "Arial"
131
+ run._element.rPr.rFonts.set(qn('w:eastAsia'),'宋体')
132
+ # 调整字体
133
+ font = p.style.font
134
+ font.size = Pt(14)
135
+
136
+ if '王磊' in p.text and user in p.text:
137
+ # 现委托 王磊 在我单位与 沈黎宾 追偿权纠纷案件中,作为我单位的委托代理人,代理权限如下:
138
+ p.text = ''
139
+ run = p.add_run('现委托')
140
+ run.font.name = "Arial"
141
+ run._element.rPr.rFonts.set(qn('w:eastAsia'),'宋体')
142
+
143
+ run = p.add_run(' 张立人 ')
144
+ run.font.underline = True
145
+ run.font.name = "Arial"
146
+ run._element.rPr.rFonts.set(qn('w:eastAsia'),'宋体')
147
+
148
+ run = p.add_run('在我单位与')
149
+ run.font.name = "Arial"
150
+ run._element.rPr.rFonts.set(qn('w:eastAsia'),'宋体')
151
+
152
+ run = p.add_run(f' {user} ')
153
+ run.font.underline = True
154
+ run.font.name = "Arial"
155
+ run._element.rPr.rFonts.set(qn('w:eastAsia'),'宋体')
156
+
157
+ run = p.add_run('追偿权纠纷案件中,作为我单位的委托代理人,代理权限如下:')
158
+ run.font.name = "Arial"
159
+ run._element.rPr.rFonts.set(qn('w:eastAsia'),'宋体')
160
+
161
+ # 判断担保公司
162
+ if '福建智云' in df[df['合同号']==contract_id]['融担公司'].tolist()[0]:
163
+ output_folder = wts_output_fjzy
164
+ elif '海南申信' in df[df['合同号']==contract_id]['融担公司'].tolist()[0]:
165
+ output_folder = wts_output_hnsx
166
+ else:
167
+ output_folder = wts_output_shex
168
+
169
+ # 保存文件到对应目录
170
+ output_path = os.path.join(output_folder, wts_file)
171
+ doc.save(output_path)
172
+
173
+ total_have = len(qsz_file_list)
174
+ total_done = num_shex+num_fjzy+num_hnsx
175
+ result = f'共 {total_have} 条\n完成 {total_done} 条\n\n上海耳序:共 {num_shex} 条\n\n福建智云:共 {num_fjzy} 条\n\n海南申信:共 {num_hnsx} 条\n\n所有文档已完成自动编辑!'
176
+
177
+ return result
178
+
179
+ if __name__ == '__main__':
180
+ doc_process()
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ pandas==2.1.0
2
+ python-docx==0.8.11
3
+ openpyxl==3.1.2
4
+ pyinstaller==5.13.2