Python3文件操作

2021/5/2 20:28:49

本文主要是介绍Python3文件操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 创建文件对象open()
  • 文本文件的写入
    • 基本的文件写入操作
    • write()/writelines()写入数据
    • close()关闭文件流
    • with语句(上下文管理器)
  • 文本文件的读取
  • 二进制文件的读取和写入
  • 文件对象的常用属性和方法
  • pickle序列化
  • csv文件的操作
    • csv:简介
    • csv.reader对象和csv文件读取
  • 文件操作练习

创建文件对象open()

open()函数用于创建文件对象,基本语法格式如下():

open(文件名,打开方式)

如果只是文件名,代表在当前目录下的问价。文件名可以录入全部路径,比如:D:\a\b.txt。为了减少‘\’的输入,可以使用原始字符串: r"d:\b\a.txt",示例如下:

f = open(r'C:\Users\lyx\Desktop\py文件操作.txt','w')

打开方式可以有如下几种:

r:只读模式
w:文件不存在则创建。存在则覆盖原来的内容重新写
a:追加模式,文件不存在则创建。存在则在原来的内容后面追加内容
b:二进制模式(与其他的模式组合使用)
+:读、写模式(可与其他的模式组合使用)

在这里插入图片描述

文本文件的写入

基本的文件写入操作

基本文件的写入主要是以下几个步骤:
1.创建文件对象
2.写入数据
3.关闭文件对象 (必须)

小操作:文件基本写入操作

f = open("a.txt","a")
s = "这是基本写入操作"
f.write(s)
f.close()

write()/writelines()写入数据

write(a): 把字符串a写入文件中
writelines(b): 把字符串列表写入文件中,不添加换行符

小操作:添加字符串列表数据到文件中

f1 = open(r'C:\Users\lyx\Desktop\py文件操作.txt','w')  #控制编码格式 encoding = "utf-8"
f1.write("我是\n你爹\n真的吗?")
f1.close()

f2 = open(r'C:\Users\lyx\Desktop\py文件操作.txt','w')  #控制编码格式 encoding = "utf-8"
a = ["我是\n","你爹\n","真的吗\n"]
f2.writelines(a)
f2.close()

close()关闭文件流

由于文件底层是由操作系统控制,所以我们打开的文件对象必须是显示的调用close()方法关闭文件对象,当调用close()方法时,首先会把缓冲区的数据写入文件(也可以直接调用flush()方法)再关闭文件,释放文件对象。
为了确保打开的文件对象正常关闭,一般会结合异常机制的finally和with关键字来实现无论何种情况都能关闭打开的文件对象。

小操作:关闭文件对象

try:
    f2 = open(r'C:\Users\lyx\Desktop\py文件操作.txt', 'a')
    str = "wo mei ai le"
    f2.write(str)
except BaseException as e:
    print(e)
#以上两行可以不写
finally:
    f2.close()

with语句(上下文管理器)

with关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场

小操作:使用with管理文件写入操作

a = "假的吧"
b = ["你是真的皮\n","你是假的吧\n","真的吗?"]
with open(r"C:\Users\lyx\Desktop\niuma.txt",'a') as f:
    f.write(a)
    f.writelines(b)

文本文件的读取

文本的读取一般使用如下的三个方法:

read(size): 读取文件中的size个字符,并作为结果返回。如果没有size参数,则读取整个文件
readline(): 读取一行内容做为结果返回,读取到文件末尾会返回空字符
readlines(): 文本文件中,每一行作为一个字符串春入到列表中,返回该列表

小操作:按行读取一个文件

with open(r"C:\Users\lyx\Desktop\niuma.txt",'r') as f:
    while True:
        str = f.readline()
        if not str:
            break
        else:
            print(str,end = "")
print("\n")

小操作:使用迭代器读取文本文件

with open(r"C:\Users\lyx\Desktop\py文件操作.txt",'r') as  f:
    for a in f:
        print(a,end = "")

二进制文件的读取和写入

二进制文件的处理流程和文本文件流程一致。首先还是要创建文件对象。不过,我们需要指定为二进制模式,从而 创建出二进制文件对象。例如:

在这里插入图片描述

创建好二进制文件对象后,仍然可以使用write()、read()实现文件的读写:
小操作:读取图片文件夹,实现文件的拷贝

with open(r"C:\Users\lyx\Desktop\dd.mp4",'rb') as f:
    with open(r"C:\Users\lyx\Desktop\dda.mp4","wb") as f1:
        for line in f.readlines():
            f1.write(line)
print("视频拷贝完成")

文件对象的常用属性和方法

文件对象的属性:

name: 返回文件的名字
mode: 返回文件的打开模式
closed: 若文件被关闭则返回True

文件对象的打开模式:

r: 读模式
w: 写模式
a: 追加模式
b: 二进制模式(可以和其他模式自由组合)
+: 读写模式(可以和其他模式自由组合)

文件对象的常用方法:

read(size): 读取文件中的size个字符,并作为结果返回。如果没有size参数,则读取整个文件
readline(): 读取一行内容做为结果返回,读取到文件末尾会返回空字符
readlines(): 文本文件中,每一行作为一个字符串春入到列表中,返回该列表
write(str):将字符串str写入到文件
writelines(s): 将字符串列表s写入到文件夹,不添加换行符

其他方法:
在这里插入图片描述

pickle序列化

  Python 中,一切皆对象,对象本质上就是一个“存储数据的内存块”。有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。对象的序列化机制广泛的应用在分布式、并行系统上。
  序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。

序列化我们使用:

pickle.dump(obj,file) obj就是要被序列化的对象,file指的是存储的文件
pickle.load(file) 从file中读取数据,反序列化成对象

小操作:将文件序列化到文件中

import pickle
a1 = "弟弟"
a2 = 123
a3 = [1,2,3]

with open("data.txt","wb") as f:
    pickle.dump(a1,f)
    pickle.dump(a2,f)
    pickle.dump(a3,f)

with open(r"data.txt","rb") as f:
    b1 = pickle.load(f)
    b2 = pickle.load(f)
    b3 = pickle.load(f)
    print(b1);print(b2);print(b3)

#注意此时a1和b1是两个对象

运行效果:
在这里插入图片描述

csv文件的操作

csv:简介

在这里插入图片描述

csv.reader对象和csv文件读取

import csv

with open("aa.csv","r") as f:  
    a_csv = csv.reader(f)
#    print(list(a_csv))  
    for row in a_csv:
        print(row)

with open("bb.csv","w") as f:
    b_csv =  csv.writer(f)
    b_csv.writerow(["ID","姓名","年龄"])
    b_csv.writerow(["10","lc",17])
    c = [["101","希希","3"],["11","东东","4"]]
    b_csv.writerows(c)

文件操作练习

小操作1:更新文件,使每行文件末尾都增添行数

需要用到的函数:
enumerate在字典上是枚举、列举的意思
enumerate参数为可遍历/可迭代的对象(如列表、字符串)
enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用enumerate
enumerate()返回的是一个enumerate对象
rstrip(): 去除结尾的换行符

a = ["第一句话\n","第二句话\n","第三局话\n"]
b = enumerate(a)
print(a)
print(b)   #<enumerate object at 0x000001EDB23D5E00>
print(list(b))   #[(0, '第一句话\n'), (1, '第二句话\n'), (2, '第三局话\n')]
#以上为测试代码

c = [temp.rstrip()+"#"+str(index+1) for index,temp in enumerate(a)]
print(c)

with open(r"C:\Users\lyx\Desktop\py文件操作.txt","r") as f:
    lines = f.readlines()
    lines = [line.rstrip()+"#"+str(temp+1)+"\n" for temp,line in enumerate(lines)]
print(lines)

#先读出推导式
with open(r"C:\Users\lyx\Desktop\py文件操作.txt",'w') as f:
    f.writelines(lines)

运行效果:
在这里插入图片描述
在这里插入图片描述



这篇关于Python3文件操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程