file 对象使用 open 函数来创建,下面说一下对文件的操作分三步:

1、打开文件获取文件的句柄,句柄就理解为这个文件

2、通过文件句柄操作文件,读取/写入文件内容

3、关闭文件。

注意:

文件打开模式有3种:

1. w 写模式,不能读取,只能写入,若文件不存在,则创建

2. r 读模式,不能写入,只能读取,而且文件必须存在;若不传文件打开模式,则默认是 r 读模式

3. a 追加模式,只能写入,在文件末尾添加内容

以w模式打开文件,写入内容,如下:

fp = open('file.txt','w')
fp.write('hhh') #若以w模式打开存在的文件,会清空以前的文件内容,重新写入hhh

以r模式打开文件,读取文件内容,如下:

fp = open('file.txt', 'r', encoding='utf-8')  #windows 的默认字符集是gbk,需要设置为utf-8,encoding参数可以指定文件的编码
print(fp.read()) #读取文件内容,返回结果类型是字符串

以r模式打开不存在的文件,如下:

fp = open('a.txt', 'r')  #若打开的文件不存在,则报错:FileNotFoundError: [Errno 2] No such file or directory: 'a.txt'
print(fp.read())

以a模式打开不存在的文件,写入内容,如下:

fp = open('a.txt', 'a')  #写入不存在的文件名,a追加模式,若文件不存在则创建
fp.write('yiy') #在文件末尾添加内容

以下是文件常用的操作方法:

read()、readline()、readlines() 读取文件内容操作:

fp = open('file.txt', 'a+')   #a+模式,指针在文件最后的位置,需要将指针移动到初始文件,才能读取内容
fp.seek(0) #多次读取文件内容时,一定要将游标移动到初始位置,否则读取内容为空
print(fp.read()) #读取文件内容,返回的是字符串,指针移动到最后位置,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
fp.seek(0) #将指针移动到初始位置
print(fp.readlines()) #读取文件内容,返回的是一个列表,元素是每行的数据,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
fp.seek(0)
print(fp.readline()) #只读取文件内容的一行内容,返回的是字符串

大文件时,读取文件高效的操作方法:

用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了:

 f = open('file.txt')
for line in f:
print(line)
这样的话,line就是每行文件的内容,读完一行的话,就会释放一行的内存

write()、writelines() 写入文件内容操作:

fp = open('file.txt', 'a+')
fp.write(''+'\n') #写文件时,只能写入字符串
fp.writelines(['123\n', '456\n', '']) #writelines可以将列表写入文件
fp.seek(0)
print(fp.readlines()) #执行结果:['2222\n', '123\n', '456\n', '789']

flush()刷新文件内容缓冲,如下:

import time
fp = open('file.txt', 'w') #以w模式打开文件
fp.write('欢乐颂') #写入文件内容
fp.flush() #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入
time.sleep(30) #sleep时间是30s
fp.close() #关闭文件

tell()查看游标的位置:

fp = open('file.txt', 'r+')
print(fp.read()) #读取文件内容,执行结果:abcdefg
print(fp.tell()) #查看游标所在位置,游标在最后一位
fp.seek(0) #将游标移动到初始位置
print(fp.tell()) #将游标移动到初始位置后,查看游标所在位置
fp.seek(2) #将游标移动到第2位
print(fp.tell()) #将游标移动到初始位置后,查看游标所在位置,游标在第二位
fp.seek(0, 2) #将游标移动到最末尾
print(fp.tell()) #将游标移动到初始位置后,查看游标所在位置,游标在最末尾

truncate(size)截取指定长度的内容:

fp = open('file.txt', 'r+')  #file.txt文件内容为abcdefg
print(fp.tell())
#fp.truncate() #若没有指定size,则清空文件内容
fp.truncate(3) #传入size,表示从0开始截断3位字符,其余的清除
fp.seek(0)
print(fp.read()) #执行结果为:abc

with用法,打开文件后,可以不手动关闭,文件不进行操作时,自动关闭,如下:

#with用法 open(文件名) as 别名,默认打开方式是 r模式
with open('file.txt') as fp:
print(fp.read())

使用with打开多个文件,写法如下:

with open('file.txt') as fp, open('a.txt') as fw:
for line in fp:
print(line)
print(fw.readlines())

修改文件的话,有两种方式,一种是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重新写新的内容;第二种是把修改后的文件内容写到一个新的文件中:

第一种:

fp = open('file.txt', 'a+')
fp.seek(0)
res = fp.read() #返回结果类型是字符串,指针在最后面
fp.seek(0) #将指针移动到初始位置
fp.truncate() #清空文件内容
new_res = res.replace('a', 'hello') #将a字符串替换为hello,替换后为新的字符串内容
fp.write(new_res) #将替换后的内容写入文件

第二种:

import os
fp = open('file.txt', 'a+')
fp.seek(0)
fw = open('a.txt', 'w') #打开第二个文件,专门写入替换后的文件内容
for line in fp: #直接循环文件对象,循环的是文件每一行的内容
new_res = line.replace('hello', '') #将hello替换为666,替换后为新的字符串内容
fw.write(new_res) #将修改后的内容写入第二个文件
fp.close() #关闭文件,关闭后不能再进行读写操作
fw.close()
os.remove('file.txt') #删除替换以前的文件
os.replace('a.txt', 'file.txt') #将新文件名替换为已删除的文件名
import os
with open('file.txt') as fp, open('a.txt', 'w') as fw:
for line in fp:
new_res = line.replace('', 'hello')
fw.write(new_res)
os.remove('file.txt')
os.replace('a.txt', 'file.txt')

下表列出了 file 对象常用的函数:

序号 方法及描述
1

file.close()

关闭文件。关闭后文件不能再进行读写操作。

2

file.flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

3

file.fileno()

返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。

4

file.isatty()

如果文件连接到一个终端设备返回 True,否则返回 False。

5

file.next()

返回文件下一行。

6

file.read([size])

从文件读取指定的字节数,如果未给定或为负则读取所有。

7

file.readline([size])

读取整行,包括 "\n" 字符。

8

file.readlines([sizehint])

读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区。

9

file.seek(offset[, whence])

设置文件当前位置

10

file.tell()

返回文件当前位置。

11

file.truncate([size])

截取文件,截取的字节通过size指定,默认为当前文件位置。

12

file.write(str)

将字符串写入文件,没有返回值。

13

file.writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

python笔记3 - 文件操作的更多相关文章

  1. python笔记:文件操作

    1.逐行打印整个文件 # -*- coding: utf-8 -*- f = open("test",'r',encoding="utf-8") count = ...

  2. python os&shutil 文件操作

    python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...

  3. python 历险记(三)— python 的常用文件操作

    目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...

  4. Python的高级文件操作(shutil模块)

    Python的高级文件操作(shutil模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让我们用python的文件处理来进行文件拷贝,想必很多小伙伴的思路是:使用打开2个 ...

  5. Python入门篇-文件操作

    Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...

  6. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  7. Python之常用文件操作

    Python之常用文件操作

  8. Python之路第一课Day3--随堂笔记(文件操作)

    一.集合的介绍 1.集合操作 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = se ...

  9. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

随机推荐

  1. 超棒的JS移动设备滑动内容幻灯实现 - Swiper

    来源:GBin1.com 在线演示 如果你需要一款帮助你实现手机或者移动设备上内容幻灯实现的JS类库的话 , Swiper是一个不错的选择,它不依赖于任何第三方的类库.因此体积非常小,适合运行在移动设 ...

  2. 1000个经常使用的Python库和演示样例代码

    以下是programcreek.com通过分析大量开源码,提取出的最经常使用的python库. 1. sys    (4627) 2. os    (4088)  3. re    (3563)  4 ...

  3. ionic 签名、打包

    ionic cordova platform add androidionic cordova build android [debug版本,无需签名] ionic cordova build and ...

  4. DDL语句--改动表

    改动表是指改动数据库中已经存在的表的定义.改动表比又一次定义表简单.不须要又一次载入数据.也不会影响正在进行的服务. MySQL中通过ALTER TABLE语句来改动表.改动表包含改动表名.改动字段数 ...

  5. 键盘enter按钮出发登陆事件

    $("#nameInput").focus();$(".txtUserName").keydown(function (event) { if (event.k ...

  6. swipeRefreshLayout与webview滑动冲突

    遇到这么个bug,webview使用swipeRefreshLayout时,下拉时事件不会被webview捕获,而是执行swipeRefreshLayout的刷新,网上一大堆一大堆的解决办法,都是什么 ...

  7. ContentObserver与DatasetObserver区别

        1. ContentObserver ContentObserver主要是通过Uri来监测特定的Databases的表,如果该Databases表有变动则会通知更新cursor中的数据. 如果 ...

  8. android 屏幕适配原则

    屏幕大小 1.不同的layout Android手 机屏幕大小不一,有480x320,640x360,800x480.怎样才能让App自动适应不同的屏幕呢? 其实很简单,只需要在res目录下创建不同的 ...

  9. 几种TCP连接中出现RST的情况(转载)

    TCP RST 网络 linux 目录[-] 1 端口未打开 2 请求超时 3 提前关闭 4 在一个已关闭的socket上收到数据 总结 参考文献: 应该没有人会质疑,现在是一个网络时代了.应该不少程 ...

  10. 总结文件操作函数(一)-C语言

    在进程一開始执行,就自己主动打开了三个相应设备的文件.它们是标准输入.输出.错误流.分别用全局文件指针stdin.stdout.stderr表示,相应的文件描写叙述符为0.1.2:stdin具有可读属 ...