[Python] 纯文本查看 复制代码
import os, requests, time, tkinter.messagebox, json
from bs4 import BeautifulSoup
from tkinter import *
# 判断是否为数字
def is_number(s):
try:
float(s)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
return False # 判断是否为数字
CN_UNIT = {
'十': 10,
'拾': 10,
'百': 100,
'佰': 100,
'白': 100,
'千': 1000,
'前': 1000,
'仟': 1000,
'钱': 1000,
'万': 10000,
'萬': 10000,
'亿': 100000000,
'億': 100000000,
'兆': 1000000000000,
}
CN_NUM = {
'〇': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '零': 0, '令': 0,
'壹': 1, '贰': 2, '叁': 3, '肆': 4, '伍': 5, '陆': 6, '柒': 7, '捌': 8, '玖': 9, '貮': 2, '两': 2,
}
CN_NUMS = {
'〇': '0', '一': '1', '二': '2', '三': '3', '四': '4', '五': '5', '六': '6', '七': '7', '八': '8',
'九': '9', '零': '0', '令': '0', '壹': '1', '贰': '2', '叁': '3', '肆': '4',
'伍': '5', '陆': '6', '柒': '7', '捌': '8', '玖': '9', '貮': '2', '两': '2'
}
def chinese_123(cn: str) -> str:
# print(cn)
a = []
for cndig in cn:
a.append(CN_NUMS.get(cndig)) # 从集合里找到要替换的字并且返回,加入到字典里
y = ''.join(a) # 重新组合
return y
# 章节大写转小写
def chinese_to_arabic(cn: str) -> int:
'''
CN_UNIT = {
'十': 10,
'拾': 10,
'百': 100,
'佰': 100,
'白': 100,
'千': 1000,
'前': 1000,
'仟': 1000,
'钱': 1000,
'万': 10000,
'萬': 10000,
'亿': 100000000,
'億': 100000000,
'兆': 1000000000000,
}
CN_NUM = {
'〇': 0, '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '零': 0, '令': 0,
'壹': 1, '贰': 2, '叁': 3, '肆': 4, '伍': 5, '陆': 6, '柒': 7, '捌': 8, '玖': 9, '貮': 2, '两': 2,
}
'''
unit = 0 # current
ldig = [] # digest
for cndig in reversed(cn):
# print(cndig)
if cndig != '第':
if cndig in CN_UNIT:
unit = CN_UNIT.get(cndig)
# print(unit)
if unit == 10000 or unit == 100000000:
ldig.append(unit)
unit = 1
elif cndig in CN_NUM:
dig = CN_NUM.get(cndig)
# print(dig)
if unit:
# print(dig)
dig *= unit
unit = 0
ldig.append(dig)
else:
return cn
if unit == 10:
ldig.append(10)
val, tmp = 0, 0
for x in reversed(ldig):
if x == 10000 or x == 100000000:
val += tmp * x
tmp = 0
else:
tmp += x
val += tmp
return val
def ok(y):
c = re.findall(r'\d+', str(y)) # 对返回的文字直接提取数字检查是否成功
if c: # 判断是否提取到数字如果成功返回文本 不成继续处理
y = ''.join(c)
else: # 提取里面还有这些字的标题然后再处理
p = re.compile('[一壹两贰二三叁四肆五伍六陆七柒八捌九玖十拾白百佰仟千万零]')
y = ''.join(p.findall(y)) # 提取包含上面字典里的标题文字
s = ['十', '拾', '白', '百', '佰', '仟', '千', '万']
if any(t in y for t in s): # 判断提取的标题是那种类型是否包含上面数字
# print(y)
y = chinese_to_arabic(y) # 再次召唤转换程序转换
# print('ok55', y)
else:
y = chinese_123(y)
#print(y)
return y
def okk():
path = 'D:\内容' #处理的文件夹
mldir = os.listdir(path)
for x in mldir:
print(ok(x), '< ',x)
#ok(x)
if __name__ == '__main__':
okk()