python:如何从多个目录的多个文件中替换或删除所有繁体中文字符串

问题描述 投票:0回答:1

我尝试将所有中文字符串替换为“#”,但似乎不起作用

import os,re
path = 'F:\\project\\test'
files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        files.append(os.path.join(r, file))
for file in files:
    with open(file, 'rb') as infile:
        while True:
            content = infile.readline()
            if re.match(r'(.*[\u4E00-\u9FA5]+)|([\u4E00-\u9FA5]+.*)', content.decode('utf-8')):
                print(content.decode('utf-8'))
                content.decode('utf-8').replace(content.decode('utf-8'),"#")
                print(content.decode('utf-8'))

我发现一些代码可以获取中文或非中文txt,例如(但我不知道要使用什么)

def find_chinese(str):
    pattern = re.compile(r'[^\u4e00-\u9fa5]')
    chinese = re.sub(pattern, '', file)
    print(chinese)

def find_unchinese(str):
    pattern = re.compile(r'[\u4e00-\u9fa5]')
    unchinese = re.sub(pattern, "", file)
    print(unchinese)

str = "2019年1月3日 - python去除空格和换行符的方法 一、去除空格 strip().strip() # ...用replace('\',''),后边的串替换掉前边的posted @ 2016-07-18 08:53 ..."
# get unchinese
find_unchinese(str)
# get chinese
find_chinese(str)
replace cjk
1个回答
0
投票
  1. python字符串是immutable,因此替换内容会创建一个具有不同内容的新字符串,它将无法就地工作

  2. 与上面的内容相关,一旦您从文件中读取了不再是真正相关的字符串,如果要修改文件,则需要在某个时候写回它(如果您不这样做,则继续)

  3. 如果您假设仅使用utf-8文件,则可以使用“ encoding ='utf-8'”并从模式中删除b标志,Python会对其进行编码和解码自己的

  4. [content.replace(content, "#")表示您要用单个#代替整行,而不仅仅是CJK数据

  5. regex模块支持静态搜索和替换,使用静态替换或回调函数:re.sub(其中“ sub”表示“替代”)

  6. 也不确定为什么要收集一大堆文件中的所有文件,然后才执行替换,为什么不在os.walk迭代中考虑?

  7. 请注意,您指定的范围只是BMP CJK范围,自(CJK Unified Ideographs扩展名A至F)已经有6个“星号”扩展名,并且目前正在计划第7个扩展名,更不用说BMP(U + F900–U + FAFF)内的旧“兼容性”范围

  8. 也不确定为什么您不会达到U + 9FFF,这是范围的实际终点,尽管目前尚未分配U + 9FF0及更高版本

© www.soinside.com 2019 - 2024. All rights reserved.