|
5#
发表于 2022-5-19 11:41:28
来自手机
|
只看该作者
本帖最后由 nttwqz 于 2022-5-19 22:45 编辑
python 3.10.4,简单试了一下,可用。
20220519
更新下,增加chardet检测文件编码,简单测试下,常见的ANSI、UTF-8、Unicode识别正常,其它编码未知。
- # -*- coding: utf-8 -*-
- # Python 3.10.4
- # chardet是第三方库,需要在cmd中输入pip install chardet手动安装
- import os, re
- from chardet.universaldetector import UniversalDetector
- from tkinter import filedialog
- with filedialog.askopenfile(filetypes=[('文本文件', ['*.txt', '*.log']), ('所有文件', '*.*')]) as f:
- txtfile = f.name
- fname, fext = os.path.splitext(f.name)
- # 使用 chardet 库判断文件编码
- with open(txtfile, 'rb') as f:
- u = UniversalDetector()
- for i in f:
- u.feed(i)
- if u.done: # 当识别出编码后,done的值为True,否则为False
- u.close()
- current_encoding = u.result['encoding']
- break
- if not u.done:
- current_encoding = input('无法识别文件编码,请手动输入:')
- with open(txtfile, mode='r', encoding=current_encoding) as f:
- print('查找文件 {} 中所有含中文的行\n'.format(os.path.abspath(f.name)))
- sclines = ''
- for line in f:
- if re.search(r'[\u4e00-\u9fff]', line):
- sclines += line
- # 生成含中文行的新文件,文件编码与源文件保持不变
- if sclines != '':
- with open('{}_含中文的行{}'.format(fname, fext), mode='w', encoding=current_encoding) as f:
- f.write(sclines)
- print('含中文的行已写入到新文件:\n{}\n\n'.format(os.path.abspath(f.name)))
- else:
- print('该文件不含中文!\n')
- os.system('pause')
复制代码 |
|