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="编码") 文件的路径: ...
随机推荐
- Mybatis映射文件sql语句注意事项
1.插入
- 图说socket与系统调用代码架构
1.引言 正式开始之前,每个人心里都应该有一点逼数,就像下面这张图一样. 系统调用也是函数调用,系统函数也是函数代码.系统函数与普通函数唯一的不同在于,系统函数可以使用cpu体系结构指令集中的特权指令 ...
- Hadoop Join
1. Reduce Join工作原理 Map端的主要工作:为来自不同表或文件的key/value对,打标签以区别不同来源的记录.然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输 ...
- Spring Cloud Ribbon说明
浅谈Spring Cloud Ribbon的原理 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现.通过Spring Clo ...
- WUSTOJ 1290: 01字串(Java)
题目链接:
- PHP迭代生成器---yield
1.迭代生成器 生成器的核心是一个yield关键字,一个生成器函数看起来像一个普通的函数,不同的是:普通函数返回一个值,而一个生成器可以yield生成许多它所需要的值.生成器函数被调用时,返回的是一个 ...
- 阿里云Centos7 搭建laravel
最近在考虑学习laravel框架,唔 现在服务器搭建一下. laravel是依赖composer的,首先在linux服务器下先安装composer.运行composer需要 php 5.3以上版本, ...
- Unity UGUI动态生成控件
一. 首先你得先清楚RectTransform组件的一些程序控制 1. 先得到UGUI控件上面的RectTransform组件 RectTransform rtr = gameObject.GetCo ...
- Visual Studio 2017修改编码UTF-8
转载自:https://blog.csdn.net/qq_36848370/article/details/82597157 VS 2017隐藏了高级保存功能,导致没办法直接去设置代码编码 UTF-8 ...
- edk2中子目录介绍
edk2中子目录介绍 来源 https://blog.csdn.net/rikeyone/article/details/80760204 参考:https://github.com/tianocor ...