您的位置:首页 > 编程语言 > Python开发

Python学习之路——文件

2020-01-15 05:43 113 查看

文件在作为计算机的重要组成部分,程序本质上也是文件。很多时候我们需要将数据保存到本地,这个时候就需要对文件进行操作。

一、打开文件

在Python中,我们利用open()函数来打开一个文件。

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
  • file:文件路径"
  • encoding:读取文件的编码格式,默认为"UTF-8"
  • buffering: 设置缓冲
  • mode:打开文件的模式
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener:自定义开启器

文件路径分为绝对路径和相对路径:
相对路径:如果目标文件和当前文件在同一级目录下,则直接使用文件名即可打开
绝对路径:从根目录开始书写,每一级直接用"/"隔开

打开文件的模式

t 文本模式 (默认)
x 模式(新建一个文件,如果该文件已存在则会报错 )
b 二进制模式
+ 打开一个文件进行更新(可读可写)
r 只读方式打开文件,文件的指针在文件的开头(默认)
rb 二进制格式打开一个文件用于只读,文件指针在文件的开头(默认模式)
r+ 打开一个文件用于读写,文件指针在文件的开头
rb+ 二进制格式打开一个文件用于读写。文件指针在文件的开头
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑原有内容会被删除。如果该文件不存在,创建新文件
wb 二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
wb+ 二进制格式打开一个文件用于读写。如果该文件存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
ab 二进制格式打开一个文件用于追加。如果该文件存在,文件指针将会放在文件的结尾。新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
ab+ 二进制格式打开一个文件用于追加。如果该文件存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写

open函数会返回一个对象,该对象代表当前打开的文件。

二、关闭文件

当文件操作完毕后应当关闭文件,如果不关闭文件则会一直占用系统内存资源。
利用close()方法关闭文件

# 打开文件
f = open('python.txt', 'r')
# 关闭文件
f.close()

三、with语句

在Python中我们可以利用with语句打开文件。利用with语句打开文件,当文件操作完毕后自动关闭文件,不需要我们手动关闭,推荐在实际编写过程中使用with语句打开文件。

with open('Python.txt', 'r') as f:
pass

# 和上述代码功能相同
f = open('Python.txt', 'r')
f.close()

四、文件的读写

一般文件的读写

读取文件:先将文件打开模式设置为可读取,再利用read()方法进行读取文件内容。
read()方法在读取文件时会一次性读取文件的所有内容,将它放到缓冲区。
写入文件:先将文件打开模式设置为可写入,再利用write()方法进行读取文件内容。write()方法可以将字符串写入文件中,并返回写入字符串地长度。

# 以读写模式打开文件
with open('Python.txt', 'w+') as f:
# 写入文件
f.write('Python')
# 读取文件
file = f.read()
print(file) # Python

大型文件的读写

由于read()和write()会一次性读取和写入文件,当文件较大时如果选择一次性读写,那么很有可能会造成内存资源消耗完毕,长时间停留在此操作,导致程序出现崩溃。
为了解决这个问题,我们选择在读写文件时进行限流处理,限制每一次读写文件的数量,以此来避免出现内存占用完毕的现象。

读取优化

设置size对read()方法限流
read()方法中可以接收一个size参数,这个参数代表了本次读取的文件的多少;
默认值为-1,代表读取整个文件;
当读取模式为文本模式时,size代表字符数量,当为二进制文件时,size代表字节数量。如果剩余数量小于size,那么则会将剩下的全部读取;
read()方法每一次读取文件,都会从上一次读取结束位置开始。

with open('Python.txt', 'r') as f:
file = ""
while True:
# 每次读取十个字符
content = f.read(10)
if not content:
break
file += content
print('文件读取完毕')

使用readline()和readlinse()方法进行限流
readline()和readlines()方法读取文件时都是一行一行地读取文件。readlines()读取文件后会将读取到地文件封装到列表中返回。

with open('Python.txt', 'r') as f:
file = ""
while True:
# 每次读取十个字符
content = f.readline()
if not content:
break
file += content

# 效果一样
content = f.readlines()
for i in content:
file += i
print('文件读取完毕')

写入优化

利用writelines()方法写入文件,该方法在写入字符串时会进行迭代操作,以换行符为分隔进行迭代。

with open('Python.txt', 'w') as f:
f.writelines('P\ny\n') # 内部写入时会分两次写入

文件指针操作

tell():返回文件的当前位置

with open('Python.txt', 'w+') as f:
f.write('1:Python\n2:C++')
print(f.readline())
print('当前位置:', f.tell())

seek():用于移动文件读取指针到指定位置
语法:fileObject.seek(offset[, whence])
offset: 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

with open('Python.txt', 'w+') as f:
f.write('1:Python\n2:C++')
a = f.readline()
print(a) # 1:Python
f.seek(10, 0)
b = f.readline()
print(b) # 1:Python

五、os模块

os 模块是Python地一个内置模块,它提供了非常丰富的方法用来处理文件和目录。
常用方法:

  • listdir() :获取当前目录结构
  • chdir():切换盘符
  • getcwd() :获取当前所在的目录
  • mkdir():创建目录 在当前目录创建
  • rmdir():删除目录
  • open():打开文件,设置打开选项,mode参数可选
  • remove():删除指定路径的文件
  • 点赞
  • 收藏
  • 分享
  • 文章举报
相思始觉海非深 发布了29 篇原创文章 · 获赞 15 · 访问量 1936 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: