Python 文件操作(2)
上一篇学习了用内置函数 open() 来打开文件,并且用 f.close() 来关闭文件。
今天来学习对这个文件对象的其他操作:读、写、找到文件当前位置……

1.读取文件
三种方法:
- read([size]),方法从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止。该方法返回一个字符串对象。
- readline(),该方法每次读出一行内容,所以,读取时占用内存小,比较适合大文件。该方法返回一个字符串对象。
- readlines(),该方法读取整个文件所有行,保存在一个列表中,每行作为一个元素,但读取大文件会比较占内存。
1.1 read()方法
with open("G:\Python\secret.txt",'r') as f:
f = f.read()
print(f)
print(type(f))
初次看见姑卡正是去年这个时候,她和她一家人住在我小屋附近的一幢大房子内,是警官罕地的大女儿。
那时的姑卡梳着粗粗的辫子,穿着非洲大花的连身长裙,赤足不用面纱,也不将身体用布缠起来,常常在我的屋外呼叫着赶她的羊,声音清脆而活泼,俨然是一个快乐的小女孩。
后来她来跟我念书,我问她几岁,她说:“这个你得去问罕地,我们沙哈拉威女人是不知道自己几岁的。”她和她的兄妹都不称呼罕地父亲,他们直接叫他的名字。罕地告诉我姑卡十岁,同时反问我:“你大概也十几岁吧?姑卡跟你很合得来呢。”我无法回答他这个荒谬的问题,只好似笑非笑的望着他。
半年多过去了,我跟罕地全家已成了很好的朋友,几乎每天都在一起煮茶喝。有一天喝茶时,只有罕地和他的太太葛柏在房内。罕地突然说:“我女儿快要结婚了,请你有便时告诉她。”我咽下一口茶,很困难的问他:“你指姑卡吗?”他是:“是,过完拉麻丹再十日就结婚。”拉麻丹是回教的斋月,那时已快开始了。
<class 'str'>
1.2 readline()方法
f = open("G:\Python\secret.txt",'r')
line = f.readline()
print(line)
print(type(line))
初次看见姑卡正是去年这个时候,她和她一家人住在我小屋附近的一幢大房子内,是警官罕地的大女儿。
<class 'str'>
f.readline()
' 那时的姑卡梳着粗粗的辫子,穿着非洲大花的连身长裙,赤足不用面纱,也不将身体用布缠起来,常常在我的屋外呼叫着赶她的羊,声音清脆而活泼,俨然是一个快乐的小女孩。\n'
f.readline()
' 后来她来跟我念书,我问她几岁,她说:“这个你得去问罕地,我们沙哈拉威女人是不知道自己几岁的。”她和她的兄妹都不称呼罕地父亲,他们直接叫他的名字。罕地告诉我姑卡十岁,同时反问我:“你大概也十几岁吧?姑卡跟你很合得来呢。”我无法回答他这个荒谬的问题,只好似笑非笑的望着他。\n'
f.close()
1.3 readlines()方法
f = open('G:\Python\secret.txt','r')
lines = f.readlines()
print(lines)
type(lines)
[' 初次看见姑卡正是去年这个时候,她和她一家人住在我小屋附近的一幢大房子内,是警官罕地的大女儿。\n', ' 那时的姑卡梳着粗粗的辫子,穿着非洲大花的连身长裙,赤足不用面纱,也不将身体用布缠起来,常常在我的屋外呼叫着赶她的羊,声音清脆而活泼,俨然是一个快乐的小女孩。\n', ' 后来她来跟我念书,我问她几岁,她说:“这个你得去问罕地,我们沙哈拉威女人是不知道自己几岁的。”她和她的兄妹都不称呼罕地父亲,他们直接叫他的名字。罕地告诉我姑卡十岁,同时反问我:“你大概也十几岁吧?姑卡跟你很合得来呢。”我无法回答他这个荒谬的问题,只好似笑非笑的望着他。\n', ' 半年多过去了,我跟罕地全家已成了很好的朋友,几乎每天都在一起煮茶喝。有一天喝茶时,只有罕地和他的太太葛柏在房内。罕地突然说:“我女儿快要结婚了,请你有便时告诉她。”我咽下一口茶,很困难的问他:“你指姑卡吗?”他是:“是,过完拉麻丹再十日就结婚。”拉麻丹是回教的斋月,那时已快开始了。']
list
lines[0] #每一行可作为一个元素
' 初次看见姑卡正是去年这个时候,她和她一家人住在我小屋附近的一幢大房子内,是警官罕地的大女儿。\n'
lines[2]
' 后来她来跟我念书,我问她几岁,她说:“这个你得去问罕地,我们沙哈拉威女人是不知道自己几岁的。”她和她的兄妹都不称呼罕地父亲,他们直接叫他的名字。罕地告诉我姑卡十岁,同时反问我:“你大概也十几岁吧?姑卡跟你很合得来呢。”我无法回答他这个荒谬的问题,只好似笑非笑的望着他。\n'
(三毛写的,高中读的撒哈拉~,推荐哦)

记得关件
f.close()

2.写入操作
两种方法:
- write(),该方法将字符串(仅支持字符串)写入文件,返回的是写入的字符长度。
- writelines(),该方法将字符串或者是列表写入文件,
2.1write()方法
f = open('G:\Python\secret.txt')
f.write('test_1')
---------------------------------------------------------------------------
UnsupportedOperation Traceback (most recent call last)
<ipython-input-10-53f5452c8e4b> in <module>()
1 f = open('G:\Python\secret.txt')
----> 2 f.write('test_1')
UnsupportedOperation: not writable
记住,一定要记得修改mode参数
f = open('G:\Python\secret.txt','w')
f.write('test_2')
6
f.close()
with open('G:\Python\secret.txt','r') as f:
print(f.read())
test_2
在'w'模式下,写入操作会将所有旧的内容都清除掉,然后写入新的东西。OR,如果没有这个文件,python将创建新文件,来把这个新来的宝宝安置在新的文件里。
2.2 writelines()方法
注意:
- 如果以list形式写入txt文件,可以写入多行;如果以str形式写入txt文件,则只能写入一行。
- 在list中的每个元素末尾,必须加上’\n’的换行符(显示输入),否则list中的各元素将写入到一行
with open('G:\Python\secret.txt','w') as f:
f.writelines(['test_2','test_3'])
with open('G:\Python\secret.txt','r') as f:
print(f.read())
test_2test_3
with open('G:\Python\secret.txt','w') as f:
f.writelines(['test_4\n','test_5\n'])
with open('G:\Python\secret.txt','r') as f:
print(f.read())
test_4
test_5
3.文件定位方法
3.1 tell()方法
当你在处理文件时,你想知道你现在在文件里的位置,可以用tell()实现。
f = open('G:\Python\secret2.txt', 'r')
content = f.read()
print('文件内容为:\n',content)
position = f.tell()
print('现在在文件的位置是:', position)
文件内容为:
BOSS is a little cat of mine. It was so cute and lovely.
I miss you.
My lovely cat.
现在在文件的位置是: 85
read()一下,就到了最后面的位置,我们现在在第85位哦。
现在我想把指针放到开头,要怎么办呢?
无问题,seek()帮你搞掂他。
3.2 seek()方法
seek(offset [,from])方法改变当前文件的位置。
Offset变量表示要移动的字节数(你想要移动多少步呀?)。
From变量指定开始移动字节的参考位置(你以谁为初始点去移动呀),默认值是0, 表示从文件开头作为起点。
- 如果from = 0,这意味着将文件的开头作为移动字节的参考位置。
- 如果from = 1,则使用当前的位置作为参考位置。
- 如果from = 2,那么该文件的末尾将作为参考位置。
f1 = open('G:\Python\secret2.txt', 'r')
f1.readline()
print('读取文件的一行后的位置:', f1.tell())
print('文件当前开始位置:', f1.seek(3, 0))
读取文件的一行后的位置: 58
文件当前开始位置: 3
f1.close()
但要注意,这里很容易出现报错。因为我们打开文件的方式,决定了我们能不能从特定的位置作为初始位置去定位我们想要的位置。
- 如果你想以文件开头作为初始位置(即from = 0),那么无论你以何种形式打开这个文件(r, w, b)都可以达到这个目的。
- 如果你想以当前位置或者文件末尾作为初始位置,那么你只能以b相关形式(二进制)去open这个文件。否则会报错。

f2 = open('G:\Python\secret2.txt', 'r')
f2.readline()
print('读取文件的一行后的位置:', f2.tell())
print('文件当前开始位置:', f2.seek(3, 1))
读取文件的一行后的位置: 58
---------------------------------------------------------------------------
UnsupportedOperation Traceback (most recent call last)
<ipython-input-18-35d5eacde913> in <module>()
2 f2.readline()
3 print('读取文件的一行后的位置:', f2.tell())
----> 4 print('文件当前开始位置:', f2.seek(3, 1))
UnsupportedOperation: can't do nonzero cur-relative seeks
Consequently, 请记住,文件的打开方式决定了你选择初始位置的权利。
所以,报错的时候不要惊讶!
最后,把打开的文件关上。
f2.close()
暂时记录到此为止
好了,又到吃零食的时候了,觅食觅食

Python 文件操作(2)的更多相关文章
- Python基础篇【第2篇】: Python文件操作
Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- Python文件操作与函数目录
文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- day8.python文件操作
打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...
- 关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()
嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折 ...
- Python之路Python文件操作
Python之路Python文件操作 一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r&qu ...
- python 文件操作 r w a
python基础-文件操作 一.文件操作 对文件操作的流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 打开文件时,需要指定文件路径和以何等方式打开文件, ...
- Python:文件操作技巧(File operation)(转)
Python:文件操作技巧(File operation) 读写文件 # ! /usr/bin/python # -*- coding: utf8 -*- spath = " D:/dow ...
- 小学生都能学会的python(文件操作)
小学生都能学会的python(文件操作) 1. open("文件路径", mode="模式", encoding="编码") 文件的路径: ...
随机推荐
- (1)、JEasyUI 之 Datagrid的Combobox 显示 textField 值的问题
(1).JEasyUI 之datagrid的Combobox显示textField值的问题 官方的datagrid Demo Row Editing in DataGrid 中field 是否如下定义 ...
- 2019年11月27日 Linux所学知识 总结
查看网络信息和网络状态 nmcli connection show 使用con-name参数指定公司使用的网络会话名称company,然后依次用ifname参数指定本机的网卡名称. 用autoconn ...
- 如何创建一个线程安全的Map?
1,使用普通的旧的Hashtable HashMap允许null作为key,而Hashtable不可以 2,使用Collections中同步化的包装方法synchronizedMap 3,使用conc ...
- C语言--函数嵌套调用
一.实验作业(6分) 本周作业要求: 选一题PTA题目介绍. 学习工程文件应用,设计实现学生成绩管理系统. 学生成绩管理系统要求 设计一个菜单驱动的学生成绩管理程序,管理n个学生m门考试科目成绩,实现 ...
- [转帖]谷歌TF2.0凌晨发布!“改变一切,力压PyTorch”
谷歌TF2.0凌晨发布!“改变一切,力压PyTorch” https://news.cnblogs.com/n/641707/ 投递人 itwriter 发布于 2019-10-01 12:38 评论 ...
- Redis 初步接触
Redis简介 Redis是什么 Redis是一个开源的,使用ANSI C 编写,高性能的Key-Value的NoSQL数据库. Redis特点 基于内存 可持久化数据 具有丰富的数据结构类型,适应非 ...
- Word 查找替换高级玩法系列之 -- 将换行符替换成回车符
我们从网上Copy过来的很多Word文档,里面使用的都是换行符,也就是我们常说的软回车,它显示为一个向下的箭头.这些符号不仅碍眼,而且会影响我们后期的排版,尤其是对段落的排版,因为Word里面的段落只 ...
- 开源定时任务框架Quartz(一)
简介 Quartz是OpenSymphony开源组织的一个开源项目,定时任务框架,纯Java语言实现,最新版本为2.3.0. 设计模式 Quartz中使用的设计模式如下: 1.Builder模式 2. ...
- Python之数字的四舍五入(round(value, ndigits) 函数)
round(value, ndigits) 函数 print(round(1.23)) # 1 print(round(1.27)) # 1 print(round(1.23,1)) # 1.2 第二 ...
- python_openCV例程遇到error: (-215) !empty() in function cv::CascadeClassifier::detectMultiScale的简单解决方法
需要把haar分类器训练的结果xml数据放在名为haarcascades的文件夹下进行调用. 将: face_cascade = cv2.CascadeClassifier('haarcascade_ ...