1.文件的操作流程

  第一,建立文件对象。
  第二,调用文件方法进行操作。
  第三,不要忘了关闭文件。(文件不关闭的情况下,内容会放在缓存,虽然Python会在最后自动把内容读到磁盘,但为了以防万一,要养成关闭文件的习惯)

先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。语法:

语法:
f = open(file_name [, access_mode][, buffering])

参数:
file_name:是一个包含了你要访问的文件名的字符串值。
access_mode:决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表,这个参数是非强制的,默认文件访问模式为只读(r)。
buffering:如果buffering的值被设为0,就不会有寄存;如果buffering的值取1,访问文件时会寄存行;如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小;如果取负值,寄存区的缓冲大小则为系统默认。

2.打开文件

打开文件的三种方式:
  open(r'E:\学习日记\python\code\文件的简单操作.py')
  open('E:\\学习日记\\python\\code\\文件的简单操作.py')
  open('E:/学习日记/python/code/文件的简单操作.py')
  #字符串前面加一个r代表原生的raw
  # rt,wt,at:r读,w、a写,t表示以文本打开

3.File对象的属性

一个文件被打开后,会得到一个file对象,你可以得到有关该文件的各种信息。
以下是和file对象相关的所有属性的列表:

# 打开一个文件
f = open("file.txt", "wb")
print("文件名: ", f.name)
print("是否已关闭 : ", f.closed)
print("访问模式 : ", f.mode) 结果:
文件名: file.txt
是否已关闭 : False
访问模式 : wb

4.close() 函数

File对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。用 close()方法关闭文件是一个很好的习惯。

# 打开一个文件
f = open("file.txt", "wb")
print("文件名: ", f.name) # 关闭打开的文件
f.close() 结果:
文件名: file.txt

5.文件操作---读

read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。

有如下文件:

5.1读取整篇文件内容

# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
f_read = f.read() # 通过read()进行读取
print(f_read) # 关闭打开的文件
f.close() 结果:
尊敬的公司领导:
此时辞呈敬请海涵。
当初公司募才纳新,未嫌我才疏学浅,承蒙收容。
入职以来领导厚爱,同事相亲,至今心怀感念,不敢稍有遗忘,勤心劳作,不求闻达富贵,薪酬所愿只需温饱残喘,欲效犬马,以图恩报。
时至今日,事与愿违,本当坚持,然效亲养身,责任在肩,今日请辞实属无奈,提携之恩,栽培之情,铭记五内,永无所愿,人生有时必当回报。
去聘人手以需时日,一月之内必当坚守,词不达意上体见谅。
此致!
敬礼!

5.2读取指定字符

read()方法可以指定参数,设定需要读取多少字符,无论一个英文字母还是一个汉字都是一个字符。

# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
f_read = f.read(8) # 通过指定参数读取字符。
print(f_read) # 关闭打开的文件
f.close() 结果:
尊敬的公司领导:

5.3读取一行内容

readline只能读取第一行代码,原理是读取到第一个换行符就停止。

# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
f_read = f.readline() # 读取一行内容。
f_read2 = f.readline() # 再读取一行内容。
print(f_read,f_read2) # 关闭打开的文件
f.close() 结果:
尊敬的公司领导:
此时辞呈敬请海涵。

5.4把内容以列表的形式输出

readlines会把内容以列表的形式输出。

# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
f_read = f.readlines() # 以列表的形式输出。
print(f_read) # 关闭打开的文件
f.close() 结果:
['尊敬的公司领导:\n', '此时辞呈敬请海涵。\n', '当初公司募才纳新,未嫌我才疏学浅,承蒙收容。\n', '入职以来领导厚爱,同事相亲,至今心怀感念,不敢稍有遗忘,勤心劳作,不求闻达富贵,薪酬所愿只需温饱残喘,欲效犬马,以图恩报。\n', '时至今日,事与愿违,本当坚持,然效亲养身,责任在肩,今日请辞实属无奈,提携之恩,栽培之情,铭记五内,永无所愿,人生有时必当回报。\n', '去聘人手以需时日,一月之内必当坚守,词不达意上体见谅。\n', '此致!\n', '敬礼!']

5.5通过for循环可以把内容按字符串输出

# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
for line in f.readlines(): # 使用for循环可以把内容按字符串输出。
# 因为文件中每行内容后面都有一个换行符,输出一行内容后就会输出一个空行,
# 而且print()语句本身就可以换行,
# 如果不想输出空行,就需要使用下面的语句:print(line.strip())
print(line.strip()) # 关闭打开的文件
f.close() 结果:
尊敬的公司领导:
此时辞呈敬请海涵。
当初公司募才纳新,未嫌我才疏学浅,承蒙收容。
入职以来领导厚爱,同事相亲,至今心怀感念,不敢稍有遗忘,勤心劳作,不求闻达富贵,薪酬所愿只需温饱残喘,欲效犬马,以图恩报。
时至今日,事与愿违,本当坚持,然效亲养身,责任在肩,今日请辞实属无奈,提携之恩,栽培之情,铭记五内,永无所愿,人生有时必当回报。
去聘人手以需时日,一月之内必当坚守,词不达意上体见谅。
此致!
敬礼!

5.6readable()检查文件是否可读(返回布尔类型)

# 打开一个文件
f = open("file.txt", "r",encoding='utf8')
res = f.readable()
print(res) # 关闭打开的文件
f.close() 结果:
True

6.文件操作---写

文件操作中的写有两种:

  w:覆盖写
  a:追加写

write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。write()方法不会在字符串的结尾添加换行符('\n'):

6.1覆盖写:

原有的文件内容是:

进行文件的覆盖写入:

# 打开一个文件
f = open('file.txt','w',encoding='utf8')
f_w = f.write('hello world')
print(f_w) # 有意思的是,这里并不打印'hello world',只打印写入多少字符 # 关闭打开的文件
f.close() 结果:
11

写入后的文件内容是:

6.2追加写

原有文件内容是:

进行文件的追加写入:

# 打开一个文件
f = open('file.txt','a',encoding='utf8')
f_w = f.write('没有钱,我很难为你办事啊!!')
print(f_w) # 有意思的是,这里并不打印'hello world',只打印写入多少字符 # 关闭打开的文件
f.close() 结果:
14

写入后文件内容是:

6.3writelines()传入可迭代对象变成字符串写入文件

writelines() 方法用于向文件中写入一序列的字符串。

这一序列字符串可以是由迭代对象产生的,如一个字符串列表。

换行需要制定换行符 \n。

语法:
fileObject.writelines(iterable) 参数:
iterable -- 可迭代对象(字符串、列表、元祖、字典)。
# 打开文件
f = open("file.txt", "w", encoding="utf-8")
seq = ["文件操作教程 1\n", "文件操作教程 2"]
f.writelines(seq) # 关闭文件
f.close()

写入后的文件内容:

6.4writable()判断文件是否可写

# 打开一个文件
f = open("file.txt", "w",encoding='utf8')
res = f.writable()
print(res) # 关闭打开的文件
f.close() 结果:
True

6.5bytes类型读、写、追加

字节类型的读写和追加只需要在原有的读写追加后面加一个"b"就可以了。

  读:rb

# 打开文件
f = open("file.txt", "rb")
a = f.read()
print(a)
print(a.decode('utf-8')) # 关闭文件
f.close() 结果:
b'\xe6\x96\x87\xe4\xbb\xb6\xe6\x93\x8d\xe4\xbd\x9c\xe6\x95\x99\xe7\xa8\x8b 1'
文件操作教程 1

  写:wb

# 打开文件
f = open("file.txt", "wb")
f.write(b'hello world') # 字符串前面加b(不支持中文)
f.write("\n你好 世界".encode('utf-8')) # 关闭文件
f.close()

  追加:ab

# 打开文件
f = open("file.txt", "ab")
f.write("\n什么是软件?\n软件是计算机程序、程序所用的数据以及有关文档资料的集合。\n软件又可以分为两大类:系统软件和应用软件。".encode('utf-8')) # 关闭文件
f.close()

7.tell和seek

tell:查询文件中光标位置
seek:光标定位

有一个文件内容如下:

查询文件中光标位置:

# 打开文件
f = open("file.txt", "r")
# 前面的数字代表移动的字符或字节,后面的数字代表模式(0:光标在开头,1:代表相对位置,2:代表光标在末尾)
f.seek(10,0)
f_tell = f.tell()
print(f_tell) # 关闭文件
f.close() 结果:
10 注:
r模式:光标默认在起始位置
w模式:先清空内容,光标回到0位置
a模式:光标默认在最后位置
# 打开一个文件
f = open("file.txt", "r+", encoding='utf-8')
str = f.read(31) # 读取31个字符
print("读取的字符串是 : ", str) # 查找当前位置
position = f.tell()
print("当前文件位置 : ", position) # 把指针再次重新定位到文件开头
position = f.seek(0, 0)
str = f.read(8) # 这次读取8个字符
print("重新读取字符串 : ", str) # 关闭打开的文件
f.close() 结果:
读取的字符串是 : You were the shadow to my light
当前文件位置 : 31
重新读取字符串 : You were

8.flush 同步将数据从缓存转移到磁盘

示例,实现进度条功能:

import sys,time  # 导入sys和time模块
for i in range(40):
sys.stdout.write('*')
sys.stdout.flush() # flush的作用相当于照相,拍一张冲洗一张
time.sleep(0.2) # 下面代码也能够实现相同的功能
import time
for i in range(40):
print('*',end='',flush=True) # print中的flush参数
time.sleep(0.2)

9.truncate 截断

  不能是r模式下执行
  w模式下,已经清空所有数据,使用truncate没有任何意义
  a模式下,截断指定位置后的内容

f = open('file.txt','a+')
f.truncate(8) #只显示6个字节的内容(6个英文字符或三个汉字,一个汉字占两个字节),后面的内容被清空。
f.seek(0,0) # 光标定位到开头
print(f.read()) 结果:
You were

10.文件操作---修改

思路:由于数据存储机制的关系,我们只能把文件1中的内容读取出来,经过修改后,放到文件2中。

原文件内容为:

我们把“又是新的开始”改成英文的“It's a new beginning”:

f1 = open('file.txt','r',encoding='utf8')   # f1是我们原文件
f2 = open('file2.txt','w',encoding='utf8') # f2是新文件
for line in f1: # 迭代器
if "又是新的开始" in line:
line = line.replace("又是新的开始","It's a new beginning")
f2.write(line) # 关闭文件
f1.close()
f2.close()

然后查看文件2的内容:

11.with语句

当with代码块执行完毕时,会自动关闭文件释放内存资源,不用特意加f.close(),而且可以同时对多个文件同时操作。
用with语句重写修改文件中的代码:
with open('file.txt','r',encoding='utf8') as f1,\
open('file2.txt','w',encoding='utf8') as f2:
for line in f1: # 迭代器
if "又是新的开始" in line:
line = line.replace("又是新的开始","It's a new beginning")
f2.write(line)

(17)-Python3之--文件操作的更多相关文章

  1. python3.7 文件操作

    #!/usr/bin/env python __author__ = "lrtao2010" #python3.7 文件操作 # r 只读,默认打开方式,当文件不存在时会报错 # ...

  2. 【python3之文件操作】

    一.文件操作 1.文件处理的流程 1)打开文件,得到文件句柄并赋值给一个变量 2)通过句柄对文件进行操作 3)关闭文件 例如: f = open('chenli.txt') #打开文件 first_l ...

  3. python3的文件操作

    open的原型定义在bultin.py中,是一种内建函数,用于处理文件 open(file, mode='r', buffering=None, encoding=None, errors=None, ...

  4. python3之文件操作

    一   打开文件   根目录在d盘的文件名为‘学习资料.txt’的文件 a)绝对路径(最开始的,根目录文件)例:    e:\学习资料.txt 相对路径   直接用文件名字 b)操作方式  只读  只 ...

  5. python3中文件操作及编码

    #之前一直没明白文件处理中的w和wb的区别到底是什么,#在看过视频后才知道,原来在linux里面是没有区别的,#但是在windows里面就能够看出区别来了#下面来个例子: with open(&quo ...

  6. python3中文件/IO编程

    python3的文件操作可谓是我见过所有语言中最舒服的,那我们来一起看一下py3中的文件操作. 1:文件的打开方式有以下几种: 注:以上图表参考菜鸟教程 2:定位读写文件  f = open(&quo ...

  7. Python3学习之路~2.7 文件操作

    对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 Somehow, it seems the love I knew was always the ...

  8. Python3 文件操作(十六)

    一 文件操作 1.介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众 ...

  9. Python3.x:open()文件操作

    Python3.x:open()文件操作 open/文件操作: #open(路径+文件名,读写模式) #读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式 f=ope ...

随机推荐

  1. Gradle 是干什么吃的?

    Gradle维基解释:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML.当前其支 ...

  2. Git的使用以及命令

    个人常用命令 git初始化操作 git init 把当前的目录变成git仓库,生成隐藏.git文件. git remote add origin url 把本地仓库的内容推送到GitHub仓库. gi ...

  3. HelloGitHub 月刊最受欢迎的开源项目 Top10(2020 年)

    作者:HelloGitHub-卤蛋 2020 年已成往事,2021 年悄然而至. 在已经过完的 2020 年里 HelloGitHub 共发布了 12 期月刊,推荐了 419 个开源项目.​每个月的 ...

  4. Scaled-YOLOv4 快速开始,训练自定义数据集

    代码: https://github.com/ikuokuo/start-scaled-yolov4 Scaled-YOLOv4 代码: https://github.com/WongKinYiu/S ...

  5. String、StringBuffer 和 StringBuilder 的区别

    面试简答 区别: 1) String 长度大小不可变 2) StringBuffer 和 StringBuilder 长度可变 3) StringBuffer 线程安全 StringBuilder 线 ...

  6. epoll的陷阱实践

    在使用epoll的时候,我们上篇文章epoll的陷阱大体介绍了epoll中会有哪些问题.这篇文章我们就针对必须要了解,也是绕不过去的陷阱进行实验,看看现象是什么,并且如何编写才能达到我们想要的效果. ...

  7. Redis集群搭建与简单使用【转】

    Redis集群搭建与简单使用 安装环境与版本 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-3.2.4 版本. 两台虚拟机都 ...

  8. linux环境下oracle 11g 静默安装

    安装环境 Linux服务器:oracle linux 6.6 64位 Oracle服务器:Oracle11gR2 64位 系统要求 1.Linux安装Oracle系统要求 系统要求 说明 内存 必须高 ...

  9. Java微服务 vs Go微服务,究竟谁更强!?

    前言 Java微服务能像Go微服务一样快吗? 这是我最近一直在思索地一个问题. 去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大会上,Mark Nels ...

  10. 【SpringBoot1.x】SpringBoot1.x 任务

    SpringBoot1.x 任务 文章源码 异步任务 在 Java 应用中,绝大多数情况下都是通过同步的方式来实现交互处理的.但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使 ...