上一篇学习了用内置函数 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)的更多相关文章

  1. Python基础篇【第2篇】: Python文件操作

    Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...

  2. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  3. Python文件操作与函数目录

    文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...

  4. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  5. day8.python文件操作

    打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...

  6. 关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()

    嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折 ...

  7. Python之路Python文件操作

    Python之路Python文件操作 一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r&qu ...

  8. python 文件操作 r w a

    python基础-文件操作   一.文件操作 对文件操作的流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件       打开文件时,需要指定文件路径和以何等方式打开文件, ...

  9. Python:文件操作技巧(File operation)(转)

    Python:文件操作技巧(File operation) 读写文件 # ! /usr/bin/python #  -*- coding: utf8 -*- spath = " D:/dow ...

  10. 小学生都能学会的python(文件操作)

    小学生都能学会的python(文件操作) 1. open("文件路径", mode="模式", encoding="编码") 文件的路径: ...

随机推荐

  1. Spring 分布式事务详解

    在学习分布式事务的过程中会遇到以下关键名词: 相关名词: XA :XA规范的目的是允许多个资源(如数据库,应用服务器,消息队列,等等)在同一事务中访问,这样可以使ACID属性跨越应用程序而保持有效.X ...

  2. 用MOQ来Mock静态方法的 2种方法(含Moq和Fakes的配合使用)

    Moq是无法直接模拟静态方法的,解决方式有两种: 1.需要修改正式代码,在源代码中建一个新的方法把静态方法包起来,调用的时候源代码调用时调用新方法而不是原来的静态方法. 在测试的时候,Mock掉这个新 ...

  3. vue的依赖注入provide和inject

    一.解决的场景问题: 根父组件A有一个方法getMap,该组件A下的所有子组件B,子组件C,子组件D,或者子组件B下的子组件E等层层嵌套情况下,在某种情况下,都需要访问父组件的getMap方法,那么常 ...

  4. jsp标签在spring boot中的关键用法

    <form:form modelAttribute="user" action="save" method="post" >// ...

  5. mysql 数据库批量刷新表字段数据

    UPDATE a,bSET b.studentno = a.studentnumber WHERE b.studentno IS NULL AND a.p_id = b.p_id

  6. ABP中的本地化处理(上)

    今天这篇文章主要来总结一下ABP中的多语言是怎么实现的,在后面我们将结合ABP中的源码和相关的实例来一步步进行说明,在介绍这个之前我们先来看看ABP的官方文档,通过这个文档我们就知道怎样在我们的系统中 ...

  7. Ubuntu截图工具Flameshot

    今天来介绍一款Ubuntu下的截图工具,名叫Flameshot. 安装 Flameshot的安装很简单. 命令行安装 sudo apt-get install flameshot 一条命令搞定! 软件 ...

  8. 解决IIS出现“由于权限不足而无法读取配置文件”的问题

    在部署IIS项目的时候,今天突然遇到了如下问题: HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效 详细错误信息: 由于权限 ...

  9. MySQL NULL 使用带来的坑

    MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...

  10. 工欲善其事必先利其器之Vagrant + VirtualBox

    Vagrant 可以管理 VirtualBox,实现快速配置创建虚拟机 1.下载软件 VirtualBox虚拟机下载地址:https://www.virtualbox.org/wiki/Downloa ...