江湖散人 发表于 2021-4-28 13:13:59

文件的读取并输出

file=open('one1.txt','rb')
file.seek(2)
print(file.readlines())

file.close()


one1.txt是:
中国
美丽
地广

执行完程序输出这样的结果,都是十六进制的吧,为啥呀?怎样才能输出原来文件的内容啊?

ba21 发表于 2021-4-28 13:21:48

open 参数2

逃兵 发表于 2021-4-28 13:28:47

不是六进制,是二进制
你的打开方式是'rb' 其中'r'指的是read 读取,'b'指的是bin 二进制
这里修改成

file=open('one1.txt','r')
file.seek(2)
print(file.readlines())

file.close()

江湖散人 发表于 2021-4-28 13:34:40

逃兵 发表于 2021-4-28 13:28
不是六进制,是二进制
你的打开方式是'rb' 其中'r'指的是read 读取,'b'指的是bin 二进制
这里修改成

Traceback (most recent call last):
File "D:/Python/newjobbeginning/chap15/demon4.py", line 19, in <module>
    print(file.readlines())
UnicodeDecodeError: 'gbk' codec can't decode byte 0xbd in position 6: illegal multibyte sequence
修改后直接报错了,啥原因啊?

suchocolate 发表于 2021-4-28 13:37:12

文本不用b,encoding修改默认编码方式,
file=open('one1.txt','r', encoding='utf-8')
print(file.readlines())
file.close()

江湖散人 发表于 2021-4-28 13:42:48

suchocolate 发表于 2021-4-28 13:37
文本不用b,encoding修改默认编码方式,

Traceback (most recent call last):
File "D:/Python/newjobbeginning/chap15/demon4.py", line 19, in <module>
    print(file.readlines())
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte
修改后,报错了,什么原因啊 ?

江湖散人 发表于 2021-4-28 13:44:28

ba21 发表于 2021-4-28 13:21
open 参数2

啥意思啊?

suchocolate 发表于 2021-4-28 13:44:59

江湖散人 发表于 2021-4-28 13:42
Traceback (most recent call last):
File "D:/Python/newjobbeginning/chap15/demon4.py", line 19,...

你的txt什么编码格式,用记事本打开看看右下角有标识的。

逃兵 发表于 2021-4-28 13:45:10

江湖散人 发表于 2021-4-28 13:34
Traceback (most recent call last):
File "D:/Python/newjobbeginning/chap15/demon4.py", line 19,...

文本编码问题
这里涉及open函数的encoding编码参数
默认使用'gbk'解码
报错内容:
UnicodeDecodeError:'gbk'编解码器无法解码位置6的字节0xbd:非法的多字节序列
这里尝试改一下utf-8编码
大部分中文文档都可以用utf-8
file=open('one1.txt','r',encoding='utf-8')

江湖散人 发表于 2021-4-28 13:50:09

逃兵 发表于 2021-4-28 13:45
文本编码问题
这里涉及open函数的encoding编码参数
默认使用'gbk'解码


不行,刚才楼上的也告诉用这样的,但是结果还是报错了。

江湖散人 发表于 2021-4-28 13:53:15

suchocolate 发表于 2021-4-28 13:44
你的txt什么编码格式,用记事本打开看看右下角有标识的。

这个是utf-8的格式

suchocolate 发表于 2021-4-28 13:54:02

本帖最后由 suchocolate 于 2021-4-28 13:56 编辑

江湖散人 发表于 2021-4-28 13:53
这个是utf-8的格式

把你现在的代码发上来吧。

591821661 发表于 2021-4-28 13:54:04

重新生成个txt,另存为,选择utf-8编码,再读取

江湖散人 发表于 2021-4-28 14:06:32

suchocolate 发表于 2021-4-28 13:54
把你现在的代码发上来吧。

file=open('one1.txt','r',encoding='utf-8')
file.seek(2)
print(file.readlines())
file.close()

江湖散人 发表于 2021-4-28 14:16:58

suchocolate 发表于 2021-4-28 13:54
把你现在的代码发上来吧。

file=open('one1.txt','r',encoding='utf-8')
file.seek(2)
print(file.readlines())
file.close()

suchocolate 发表于 2021-4-28 14:18:49

本帖最后由 suchocolate 于 2021-4-28 14:23 编辑

江湖散人 发表于 2021-4-28 14:16
file=open('one1.txt','r',encoding='utf-8')
file.seek(2)
print(file.readlines())


把seek去掉。
读二进制文件的话能够准确知道字节数,文本文件时不好判断飘逸到哪里了,并不代表字数。

江湖散人 发表于 2021-4-28 14:21:24

suchocolate 发表于 2021-4-28 14:18
把seek去掉

['\ufeff中国\n', '美丽\n', '地广']
去掉后就是这样的结果,前边还多了几个字母。咋去掉嗯?
这个程序就是想练练这个seek的用法的。

suchocolate 发表于 2021-4-28 14:26:32

江湖散人 发表于 2021-4-28 14:21
['%ufeff中国\n', '美丽\n', '地广']
去掉后就是这样的结果,前边还多了几个字母。咋去掉嗯?
这个程序 ...

练习seek看这个:https://www.runoob.com/python3/python3-file-seek.html
你这标题大家以为你在练习读取文本文件。

江湖散人 发表于 2021-4-28 14:31:47

suchocolate 发表于 2021-4-28 14:26
练习seek看这个:https://www.runoob.com/python3/python3-file-seek.html
你这标题大家以为你在练习读 ...

好的,谢谢啊
页: [1]
查看完整版本: 文件的读取并输出