鱼C论坛

 找回密码
 立即注册
查看: 1915|回复: 13

[已解决]文件打开

[复制链接]
发表于 2022-4-4 10:14:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def replace_file(file_name,new_line,b):
    f = open(file_name,'r+', encoding='utf-8')
    g = f.readlines()
    f.seek(0, 0)
    for i in g:
        i_new = i.replace(new_line,b)
        f.write(i_new)
    f.close()

def count_line(file_name,new_line):
    import re
    f = open(file_name, encoding='utf-8')
    g = f.readlines()
    f.seek(0,0)
    message = ''
    for line in g:
        message += line.rstrip()
    c = re.findall(new_line,message)
    count = len(c)
    return count

file_name = input('请输入文件名:')
new_line = input('请输入需要替换的文字:')
b = input('请输入新的文字:')
c = count_line(file_name,new_line)

print('文件%s中共有%s个%s'%(file_name,c,new_line))
print('您确定要把所有的%s都替换成%s:'%(new_line,b))
temp = input('(YES/NO):')
if temp == 'YES' or 'yes':
    replace_file(file_name,new_line,b)


报错:1、'utf-8' codec can't decode byte 0x87 in position 10: invalid start byte
          2、'gbk' codec can't decode byte 0xcf in position 53: illegal multibyte sequence

其实本来可以运行的,后面不知道咋的,就一直报错
最佳答案
2022-4-4 10:51:05
编码不对的话会出错的,你的文件不一定编码就会统一,

所以用单一的编码是没法做到通用的,你可以用 cchardet 这个库先对编码进行检测,

故对你的代码修改如下(需要安装 cchardet,pip install cchardet):

  1. file_name = input('请输入文件名:')

  2. import cchardet
  3. with open(file_name, 'rb') as f:
  4.     encoding = cchardet.detect(f.read(1024))['encoding']

  5. def replace_file(file_name,new_line,b):
  6.     f = open(file_name,'r+', encoding=encoding)
  7.     g = f.readlines()
  8.     f.seek(0, 0)
  9.     for i in g:
  10.         i_new = i.replace(new_line,b)
  11.         f.write(i_new)
  12.     f.close()

  13. def count_line(file_name,new_line):
  14.     import re
  15.     f = open(file_name, encoding=encoding)
  16.     g = f.readlines()
  17.     f.seek(0,0)
  18.     message = ''
  19.     for line in g:
  20.         message += line.rstrip()
  21.     c = re.findall(new_line,message)
  22.     count = len(c)
  23.     return count


  24. new_line = input('请输入需要替换的文字:')
  25. b = input('请输入新的文字:')
  26. c = count_line(file_name,new_line)

  27. print('文件%s中共有%s个%s'%(file_name,c,new_line))
  28. print('您确定要把所有的%s都替换成%s:'%(new_line,b))
  29. temp = input('(YES/NO):')
  30. if temp == 'YES' or 'yes':
  31.     replace_file(file_name,new_line,b)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-4 10:26:46 From FishC Mobile | 显示全部楼层
狠古老的话题了,不是所有文件都是utf8也不是所有文件都是gbk,如果你用固定代码去批量处理一批文件10有89是不行的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 10:45:36 | 显示全部楼层
       如果方便的话,把你要处理的文件发成附件。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 10:51:05 | 显示全部楼层    本楼为最佳答案   
编码不对的话会出错的,你的文件不一定编码就会统一,

所以用单一的编码是没法做到通用的,你可以用 cchardet 这个库先对编码进行检测,

故对你的代码修改如下(需要安装 cchardet,pip install cchardet):

  1. file_name = input('请输入文件名:')

  2. import cchardet
  3. with open(file_name, 'rb') as f:
  4.     encoding = cchardet.detect(f.read(1024))['encoding']

  5. def replace_file(file_name,new_line,b):
  6.     f = open(file_name,'r+', encoding=encoding)
  7.     g = f.readlines()
  8.     f.seek(0, 0)
  9.     for i in g:
  10.         i_new = i.replace(new_line,b)
  11.         f.write(i_new)
  12.     f.close()

  13. def count_line(file_name,new_line):
  14.     import re
  15.     f = open(file_name, encoding=encoding)
  16.     g = f.readlines()
  17.     f.seek(0,0)
  18.     message = ''
  19.     for line in g:
  20.         message += line.rstrip()
  21.     c = re.findall(new_line,message)
  22.     count = len(c)
  23.     return count


  24. new_line = input('请输入需要替换的文字:')
  25. b = input('请输入新的文字:')
  26. c = count_line(file_name,new_line)

  27. print('文件%s中共有%s个%s'%(file_name,c,new_line))
  28. print('您确定要把所有的%s都替换成%s:'%(new_line,b))
  29. temp = input('(YES/NO):')
  30. if temp == 'YES' or 'yes':
  31.     replace_file(file_name,new_line,b)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 10:52:29 | 显示全部楼层
import cchardet as chardet

# 先检测出文件编码
with open("test.txt", "rb") as f:
    msg = f.read()

enc = chardet.detect(msg) # 返回的是个字典 编码和准确度。如:{'encoding': 'UTF-8', 'confidence': 0.9900000095367432}
print(enc)
enc = enc['encoding']

# 然后以指定编码打开文件
with open("test.txt", "r", encoding=enc) as f:
    print(f.read())
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-4 15:54:43 | 显示全部楼层
isdkz 发表于 2022-4-4 10:51
编码不对的话会出错的,你的文件不一定编码就会统一,

所以用单一的编码是没法做到通用的,你可以用 cch ...

第一步:下载chardet-4.0.0.tar.gz
第二步:下载setuptools
前面两步,我都下载了后面我真的不知道怎么安装 chardet 模块了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 15:55:34 | 显示全部楼层
QQ小鱼 发表于 2022-4-4 15:54
第一步:下载chardet-4.0.0.tar.gz
第二步:下载setuptools
前面两步,我都下载了后面我真的不知道怎么 ...

你直接用 pip 安装就可以了呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-4 16:13:42 | 显示全部楼层
isdkz 发表于 2022-4-4 15:55
你直接用 pip 安装就可以了呀

还是不会,我已经下载了pip压缩包了,但是里面都是py文件,有一个setup.py文件,根本不知道咋办
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 16:17:04 | 显示全部楼层
QQ小鱼 发表于 2022-4-4 16:13
还是不会,我已经下载了pip压缩包了,但是里面都是py文件,有一个setup.py文件,根本不知道咋办
{:5_107 ...


执行这个:
  1. python setup.py install
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 16:17:47 From FishC Mobile | 显示全部楼层
QQ小鱼 发表于 2022-4-4 15:54
第一步:下载chardet-4.0.0.tar.gz
第二步:下载setuptools
前面两步,我都下载了后面我真的不知道怎么 ...

直接pip不比这样简单
不会cmd都不会用?,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-4 16:21:17 | 显示全部楼层

我不是很懂,用那个执行这个指令,py文件不是都是黑一样就关闭了吗,那个setup.py也是,用编辑器打开吗?我是第一次下模板
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 16:23:10 | 显示全部楼层
QQ小鱼 发表于 2022-4-4 16:21
我不是很懂,用那个执行这个指令,py文件不是都是黑一样就关闭了吗,那个setup.py也是,用编辑器打开吗? ...

在地址栏(就是那个写着文件路径的地方)输 cmd,

然后在 cmd 执行那个命令
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-4 16:41:24 | 显示全部楼层
isdkz 发表于 2022-4-4 16:23
在地址栏(就是那个写着文件路径的地方)输 cmd,

然后在 cmd 执行那个命令

一下午就证明我是个大聪明,输进去没有反应,我也不能发图片给你看,好难啊!估计pip也没安装好,那个模块也安装不了,烦死了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 16:48:24 | 显示全部楼层
QQ小鱼 发表于 2022-4-4 16:41
一下午就证明我是个大聪明,输进去没有反应,我也不能发图片给你看,好难啊!估计pip也没安装好,那个模 ...

加我微信发图片吧,isdkz_
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 08:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表