鱼C论坛

 找回密码
 立即注册
查看: 2068|回复: 7

[已解决]python读取txt文件时的一个问题

[复制链接]
发表于 2017-10-7 10:18:02 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 庞司令 于 2017-10-7 10:18 编辑

win 10
python 363

——————————————————————————————————————————————————————————————
程序代码如下:

f=open('D:\\下载\\橙红年代.txt','rt')
while True:
    line=f.readline()
    if len(line)!=0:
        print(line,end='')
    else:
        break
f.close()

——————————————————————————————————————————————————————————————

错误代码如下:

Traceback (most recent call last):
  File "E:\python363\书本程序\橙红年代阅读.py", line 3, in <module>
    line=f.readline()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

打开的文件是以前读的一本小说,请问为什么会出错呢?在网上找,说是因为解码方式不对,然后也尝试了一些别的解码方式,但还是没办法实现我的功能,请问该如何修改呢?
最佳答案
2017-10-7 10:45:45
文件编码问题,要么把你的txt文件另存为时选下编码。

要么参考如下
安装chardet
https://pypi.python.org/pypi/chardet

import chardet
#以rb读取文件返回文件的编码(用到了chardet类)
        with open(file_name, 'rb') as f:
            raw = f.read()
            result = chardet.detect(raw)  
            encoding = result['encoding']

        lines = 0   
        with open(file_name,encoding=encoding) as f:
            print('正在分析文件:%s ...' % file_name)     
            try:
                for each_line in f:
                    lines += 1
            except Exception as reason:
                print(str(reason)) # 读取出错显示错误信息......
        print('%s -> %s' % (file_name,lines))
        return lines
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-7 10:45:45 | 显示全部楼层    本楼为最佳答案   
文件编码问题,要么把你的txt文件另存为时选下编码。

要么参考如下
安装chardet
https://pypi.python.org/pypi/chardet

import chardet
#以rb读取文件返回文件的编码(用到了chardet类)
        with open(file_name, 'rb') as f:
            raw = f.read()
            result = chardet.detect(raw)  
            encoding = result['encoding']

        lines = 0   
        with open(file_name,encoding=encoding) as f:
            print('正在分析文件:%s ...' % file_name)     
            try:
                for each_line in f:
                    lines += 1
            except Exception as reason:
                print(str(reason)) # 读取出错显示错误信息......
        print('%s -> %s' % (file_name,lines))
        return lines
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-7 10:57:15 | 显示全部楼层
好像,没有那么麻烦吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-7 10:57:37 | 显示全部楼层
  1. f=open('D:\\下载\\橙红年代.txt','rt', encoding = 'utf-8')
  2. while True:
  3.     line=f.readline()
  4.     if len(line)!=0:
  5.         print(line,end='')
  6.     else:
  7.         break
  8. f.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-7 10:58:07 | 显示全部楼层
上面不行就下面
  1. f=open('D:\\下载\\橙红年代.txt','rt',encoding = 'gbk')
  2. while True:
  3.     line=f.readline()
  4.     if len(line)!=0:
  5.         print(line,end='')
  6.     else:
  7.         break
  8. f.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-7 11:17:36 | 显示全部楼层

encoding='gbk'试过了,不行的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-7 11:18:12 | 显示全部楼层

Traceback (most recent call last):
  File "E:\python363\书本程序\橙红年代阅读.py", line 3, in <module>
    line=f.readline()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-7 11:19:13 | 显示全部楼层

Traceback (most recent call last):
  File "E:\python363\书本程序\橙红年代阅读.py", line 3, in <module>
    line=f.readline()
  File "E:\python363\lib\codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-2 21:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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