零基础学 Python(2018 版)
尹会生
前游戏公司技术总监,前新浪网技术经理
80141 人已学习
新⼈⾸单¥68
课程目录
已完结/共 72 讲
第一章 :Python介绍和安装 (3讲)
第二章 :Python基础语法 (3讲)
第四章 :条件与循环 (5讲)
第五章 :映射与字典 (2讲)
第六章 :文件和输入输出 (2讲)
第七章 :错误和异常 (1讲)
第九章 :模块 (1讲)
第十章 :语法规范 (1讲)
第十一章 :面向对象编程 (4讲)
第十二章 :多线程编程 (2讲)
第十六章 :综合案例 & 结课测试 (1讲)
特别放送 (1讲)
零基础学 Python(2018 版)
登录|注册
留言
54
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 20 | 文件的常用操作
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | Python语言的特点
02 | Python的发展历史与版本
03 | Python的安装
04 | Python程序的书写规则
05 | 基础数据类型
06 | 变量的定义和常用操作
07 | 序列的概念
08 | 字符串的定义和使用
09 | 字符串的常用操作
10 | 元组的定义和常用操作
11 | 列表的定义和常用操作
12 | 条件语句
13 | for循环
14 | while循环
15 | for循环语句中的if嵌套
16 | while循环语句中的if嵌套
17 | 字典的定义和常用操作
18 | 列表推导式与字典推导式
19 | 文件的内建函数
20 | 文件的常用操作
21 | 异常的检测和处理
22 | 函数的定义和常用操作
23 | 函数的可变长参数
24 | 函数的变量作用域
25 | 函数的迭代器与生成器
26 | Lambda表达式
27 | Python内建函数
28 | 闭包的定义
29 | 闭包的使用
30 | 装饰器的定义
31 | 装饰器的使用
32 | 自定义上下文管理器
33 | 模块的定义
34 | PEP8编码规范
35 | 类与实例
36 | 如何增加类的属性和方法
37 | 类的继承
38 | 类的使用-自定义with语句
39 | 多线程编程的定义
40 | 经典的生产者和消费者问题
41 | Python标准库的定义
42 | 正则表达式库re
43 | 正则表达式的元字符
44 | 正则表达式分组功能实例
45 | 正则表达式库函数match与search的区别
46 | 正则表达式库替换函数sub()的实例
47 | 日期与时间函数库
48 | 数学相关库
49 | 使用命令行对文件和文件夹操作
50 | 文件与目录操作库
51 | 机器学习的一般流程与NumPy安装
52 | NumPy的数组与数据类型
53 | NumPy数组和标量的计算
54 | NumPy数组的索引和切片
55 | pandas安装与Series结构
56 | Series的基本操作
57 | Dataframe的基本操作
58 | 层次化索引
59 | Matplotlib的安装与绘图
60 | 机器学习分类的原理
61 | Tensorflow的安装
62 | 根据特征值分类的模型和代码
63 | 网页数据的采集与urllib库
64 | 网页常见的两种请求方式get和post
65 | HTTP头部信息的模拟
66 | requests库的基本使用
67 | 结合正则表达式爬取图片链接
68 | Beautiful Soup的安装和使用
69 | 使用爬虫爬取新闻网站
70 | 使用爬虫爬取图片链接并下载图片
强势回归:零基础学Python2022版来啦!
71 | 如何分析源代码并设计合理的代码结构&结课测试
本节摘要

《三国演义》中的人物名单及兵器谱文本下载地址:

https://github.com/wilsonyin123/geekbangpython/tree/master/txt

登录 后留言

全部留言(54)

  • 最新
  • 精选
giteebravo
read 和 seek 的单位是字符还是字节呢?

作者回复: 操作的单位都是字节。 另 ASCII码中,一个英文字母占一个字节,中文汉字占两个字节;UTF-8编码中,一个英文字母占一个字节,中文占三个字节;Unicode编码应为和中文都是两个字节。

2019-01-20
3
13
硕杨Sxuya
不友好,文件的第一个字符是1,tell()输出的也是位置1,很容易乱,为什么不多进行几个呢?比如到第5个字符,这样不就去分开“位置的指针数字”和“内容的数字”,没想过新手会蒙圈你说的1到底是哪个1么?。。。

作者回复: 有道理,改变文件内容或者多移动几个位置会让大家更好理解,谢谢你的反馈,后面注意提升演示代码友好度。

2018-07-26
9
Kirin
老师我的是mac系统。版本3.7 为什么文件是中文的时候seek的第二个参数不能为1。而且为0的时候偏移之后文件不能读取。感觉有很多东西老师你都没讲啊

作者回复: seek()操作非常简单,这里主要希望大家了解文件指针这个概念,因此我没有太详细讲解每个参数。一般我们对文本经常用到的就只有移动到开头和移动到结尾操作。如果需要使用第二个参数,需要在打开文件的时候使用b参数,我想你遇到的问题应该是open(‘文件名’,‘r’) 只使用了r参数。这个是Python的规定了。 常用操作如下: # 移动到文件开头,重新读取文件 f = open(‘b.txt’,’rb’) # b.txt 内容 f.read() # b’hello python1\nhello python2\n' f.seek(0) # 移动到文件的开头 f.seek(0,0) # 移动到文件的开头 # 移动到文件结尾,以便追加新的信息 f.seek(0,2) # 28 # 注意这两种操作无需open()函数的第二个参数使用’b’参数,但是当你使用seek()函数第二个参数为1、2时,第一个参数如果是非0 就要增加’b’参数,否则会报错了。 #取得倒数第三个字符 f.seek(-3,2) # 25 f.read(1) # b’n’ # 取得第7个字符 f.seek(0) # 0 f.seek(6,0) # 6 f.read(1) # b’p’ # 另一种方法 f.seek(4,0) # 4 f.seek(2,1) # 2 f.read(1) # b’p’ 了解了什么情况能够使用seek()第二个参数之后再来说一下中文的问题。因为中文涉及到两种常见编码: utf-8和gb2312,由于你使用的是mac系统,默认在文本文件写入一个汉字,就会占用三个位置。 例如:“你好” 使用 open(‘filename’,’rb’)方式打开就是 b'\xe4\xbd\xa0\xe5\xa5\xbd’ 这样的内容,那么要注意操作汉字必须要保证是三个位置一起操作,才是操作一个汉字。而如果open()函数不带b参数,seek()函数依然只能使用移动到开头和结尾,没有看到你的具体错误信息,但我猜想这可能就是你的报错原因了,比如使用seek读取第二个汉字 f = open('b.txt','rb') # '你好,python\n极客时间\n' f.read() # b’\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8cpython\n\xe6\x9e\x81\xe5\xae\xa2\xe6\x97\xb6\xe9\x97\xb4\n' f.seek(1,0) # 1 f.seek(2,1) # 3 f.read(3).decode('utf-8') # ‘好’

2018-07-26
8
太阳宇宙
老师,您在视频中演示的把之前的内容注释掉是怎么操作的,谢谢

作者回复: 在pycharm使用ctrl+/ 可以把选中的行注释掉,再次输入可以取消注释

2018-07-08
6
好难啊。。。。

作者回复: 学习编程是一条不断上升的曲线,爬过波峰会看到更美的风景,加油哦!

2018-07-04
5
统计小白er
请问这是为什么呢?求老师解惑,感谢 file6 = open('name.txt') print(file6.tell()) print(file6.read(1)) print(file6.tell()) file6.seek(5,0) print(file6.tell()) print(file6.read(1)) print(file6.tell()) file6.close() 0 a 1 5 Traceback (most recent call last): File "D:/文件集/数据分析文件夹/python入门学习/file_op.py", line 26, in <module> print(file6.read(1)) UnicodeDecodeError: 'gbk' codec can't decode byte 0xc1 in position 2: illegal multibyte sequence

作者回复: 在windows下,打开文件默认使用的是和系统相同的字符编码即gbk,但是文件为utf-8编码,为open增加 enconding=utf-8 属性就可以解决了

2020-06-21
3
1
刘壹
老师,像这样特定的知识(read),全部的能在哪里查询呀。

作者回复: 他们统称为内置函数库,在官方文档https://docs.python.org/zh-cn/3.7/library/index.html https://docs.python.org/zh-cn/3.7/library/functions.html 标准库这个位置可以找到

2020-03-27
2
1
chi
我遇到了一个问题想请教一下老师。在本节前面的内容都没问题,直到最后要将 file6.seek(0) 改为 file6.seek(5,0)。 代码如下: ====== file6 = open('name.txt') print('当前文件指针位置 %s' %file6.tell()) print('当前读取到了一个字符:%s' %file6.read(1)) print('当前文件指针位置%s' %file6.tell()) # 注意seek参数,第一个代表偏移量,第二个代表偏移起始位置 file6.seek(5,0) print('进行了seek操作') print('当前文件指针位置%s' %file6.tell()) print('当前读取到了一个字符:%s' %file6.read(1)) print('当前文件指针位置%s' %file6.tell()) file6.close() ====== 输出的结果是 ====== Traceback (most recent call last): File "D:/DongYunbo/python文件/file_op.py", line 36, in <module> print('当前读取到了一个字符:%s' %file6.read(1)) 当前文件指针位置 0 UnicodeDecodeError: 'gbk' codec can't decode byte 0xc1 in position 2: illegal multibyte sequence 当前读取到了一个字符:a 当前文件指针位置1 进行了seek操作 当前文件指针位置5 ====== 感觉是由于编码的问题,中文字“诸”无法输出,可是要如何解决呢?尝试了 open('name.txt',encoding='utf-8') 也会报错(不一样的错误)。 感谢老师的回答与付出。

作者回复: 您好,UnicodeDecodeError: 'gbk' 是表示文件为gbk编码,可以使用open('name.txt',encoding='gbk')方式读取, 另外要注意由于seek()是按照字节操作的,如果文件里面有汉字要注意两个字节一个汉字。

2019-04-23
4
1
WALKER
老师,为什么我在文件中写上汉字,读取文件出来的都是乱码。

作者回复: 要保证读写编码一致才会不出现乱码,例如windows是gb2312,linux是utf8,python要根据需要调整写入和读取的编码,保证读写的参数 文件的编码 操作系统的编码一致才会不出现乱码

2018-07-06
1
王玥琛
老师,我的代码是这样的: file5 = open('name.txt',encoding='utf-8') print(file5.tell()) file5.read(1) print(file5.tell()) 出来的结果是0和3,这是因为字符集的原因吗

作者回复: 你好,和字符集以及文本里的内容都有关系,这里的read()单位是字,比如一个字母占用1个字符,一个汉字占用2个字符,而read()读取一个字,它的位置自然会向后移动2个字符, 所以结果为tell() --- 输出3 。

2021-11-28
收起评论