【Python文件操作】

======文件操作=

# 一,文件介绍:文件分为:文本文件,二进制文件
# 1.文件:就是数据存放的容器
# 2.文件的作用:可以持久性的存储数据内容(如果想在电脑上存储一个字符串,那必须要把字符串存放到一个文件中,否则无法存储)
# 3.文件的组成:1)文件名;2)扩展名;3)文件内容

# 二,文件的使用流程:1)打开;2)读写;3)关闭
# 1)打开文件:其实就是通过一个管道,怼到文件上,并打开,进行读写,然后再关闭,这个管道,称之为“文件句柄”,
# 一般通过open()函数插上一个管子来打开这个文件,open()函数参数,主要使用前两个file,mode
# 相对路径,相对于哪一个目录下面的指定文件(a.txt是相对于当前“python文件操作.py”文件的同级目录的位置)
# open()函数的返回值就是一个文件的对象,即是管道
# r模式,只读模式,如果文件不存在,读取时会报错,文件不存在;如果是r模式,执行写操作时会报错,提示文件不可写;只能是只读的方式;读取的指针在文件的开头
# w模式,只写模式,如果文件不存在,会创建新的文件;w模式打开时,指针放在文件的开头,会覆盖删除原来文件的全部内容; w模式,执行读取时会报错,不支持读操作
# a模式,类似w模式,追加只写模式;文件不存在时会创建新的文件;只能写入,不能读取,如果读取会报错,不可读;打开文件后指针放在文件内容的末尾;执行写操作时,
#       会在文件内容最后追加
# 增加b: rb,wb,ab: 是以二进制格式进行操作文件读写;如果文件是二进制文件,则选择此模式,如图片,视频,音频等
# 增加+:r+, w+, a+, rb+, wb+, ab+模式,代表都是以“读写”模式进行打开

# f = open("a.txt", "r")
# f = open("a.txt", "w")
# f = open("a.txt", "a")
f = open("a.txt", "r+")    # r+模式,可以读写,如果没有文件会报错,如果read()和write()函数连续操作,写的内容会追加在内容最后,如
                           # 果只写操作,会把文件的内容从最前面进行部分覆盖,

# 2)读写操作
# content = f.read()
# print(content)

f.write("123")

# 3)关闭文件
f.close()


# rb,wb,ab的操作案例:
# 1.rb读取二进制文件
# 1.1.打开二进制文件
# fromFile = open("xx.jpg","rb")
#
# # 1.2.读二进制文件
# fileContent = fromFile.read()
# print(fileContent)
#
# # 1.3.关闭二进制文件
# fromFile.close()
#
# # 2.wb写入二进制文件, 将图片xx.jpg的内容的前半部分写入到xx2.jpg中
# # 2.1 打开二进制文件
# toFile = open("xx2.jpg", "wb")
#
# # 2.2 写入二进制文件
# content = fileContent[0:len(fileContent) // 2]  # fileContent[0: len(fileContent) // 2]是对xx.jpg的内容进行分片处理,只要前半部分
# toFile.write(content)
#
# # 2.3 关闭二进制文件
# toFile.close()

在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/77eb260cd306476580c61c3e1fc5a248.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAZ2FvZ3Nm,size_20,color_FFFFFF,t_70,g_se,x_16

====输入和输出

# # 2.wb写入二进制文件, 将图片xx.jpg的内容的前半部分写入到xx2.jpg中
# # 2.1 打开二进制文件
# toFile = open("xx2.jpg", "wb")
#
# # 2.2 写入二进制文件
# content = fileContent[0:len(fileContent) // 2]  # fileContent[0: len(fileContent) // 2]是对xx.jpg的内容进行“切片”处理,只要前半部分
# toFile.write(content)
#
# # 2.3 关闭二进制文件
# toFile.close()

# =========2)文件读写
# ====2.1)文件读
# 2.1文件定位,f.seek(self,offset, whence),一般传入2个参数,一个是offset偏移量,whence是从何处;
#    如果是文本文件,那whence必须是0,如果是二进制文件,才可以为1或2;
#    0代表是文件的开始位置,默认值是0,可以不输入,1代表是二进制文件的当前位置,2代表二进制文件的末尾位置

# 打开文件
# f = open(file="a.txt", mode="r")

# 读写文件
# print("偏移前的位置:",f.tell())  # f.tell()函数是告诉我当前指针的位置
# f.seek(6)                       # f.seek()函数是让当前指针偏移几个位置
# print("偏移后的位置:",f.tell())
# print(f.read())                 # f.read([n])函数读取文件的所有内容, n是读取的字节长度
# print("读取后的位置:",f.tell())
# content = f.readline(10)          # f.readline([limit])读取文件的一行,limit是读取一行的限制的最大字节数
# print(content)
# content = f.readlines()           # f.readlines()会自动的将文件按换行符进行处理,将处理好的每一行组成一个列表返回,可以通过for循环遍历
# print(content)

# for in 遍历:可以遍历文件对象f,也可以遍历readlines()返回的行列表
# 1.for in 遍历文件对象f,f是个可以迭代的对象
# f = open("a.txt", "r")
# for i in f:
#     print(i, end="")

# 2.for in 遍历文件readlines()的行列表:
import collections
# f = open("a.txt", "r")
# print(isinstance(f, collections.Iterator))   # instance(o, Iterator)函数判断一个对象是不是属于某一个类的

# listContent = f.readlines()
# print(listContent)
# for i in listContent:
#     print(i, end="")

# 3.判读文件是否可读
# f = open("a.txt", "r")
# if f.readable():
#     content = f.readlines()
#     print(content)
# # 关闭文件
# f.close()
# 总结注意:
# ->1.一般文件特别大的时候,可以使用readline(),或者for in方便读取文件:按行加载,可以省内存;但相比其他两个方法性能较低;
# ->2.如果文件不是特别大,可以用read()或readlines()方法,一次性读取所有内容:虽然占内存,但处理性能比较高;

# ====2.2)文件写: f.write("内容"),此函数返回写入内容的长度
# f = open("a.txt", "a+")
# # 文件读写,容错处理
# if f.writable():
#     len_content = f.write("ni hao4444444444")
#     print(len_content)
#
# if f.readable():
#     print(f.tell())
#     len_read = f.read()
#     f.seek(len(len_read) /2)   # len()函数可以对读取文件的内容做长度计算,而不能对文件对象做长度计算;
#     print(f.read())
#
# f.close()

# ==========3)文件关闭
# 关闭文件:f.close(), 可以释放系统资源,会立即清空缓冲区的数据内容到磁盘文件
# 补充:f.flush(),是立即清空缓冲区的内容,并写到文件中去
# f = open("a.txt", "w")
# f.write("abc")
# f.flush()
# f.close()


# ==========4)其他操作, 模块 import os, 操作,这些操作都在os的模块里面
# 1)文件重命名
import os
# os.rename("b.txt", "bb.txt")  # os.rename(src, dst)修改文件的名称,# os.rename(old, new) 修改单级目录/文件名称
# os.rename("one", "first")     # os.rename(src, dst)修改文件路径的名称
# os.renames("two/two.txt", "first/first.txt")  # os.renames(old, new) 修改多级目录/文件名称

# 2)文件删除:删除文件,删除目录
# 删除文件,如果文件不存在,删除时会报错“文件不存在”
# os.remove("bb.txt")

# 删除目录:
# os.rmdir("first/first2")  # 不能递归删除目录,如果文件夹非空,会报错
# os.removedirs("first/first2")  # 可以递归删除目录,如果文件夹非空,会报错

# 3)文件创建目录
# os.mkdir("first")   # os.mkdir()只能创建一层目录,不能递归创建目录

# 4)查看改变列举目录
# open("cc.txt", "w")
# # 4.1 获取当前目录:os.getcwd()
# print(os.getcwd())

# 4.2 改变默认目录: os.chdir("目标目录")
# os.chdir("first")
# open("dd.txt", "w")

# 4.3 获取目录内容列表:os.listdir("./")
# print(os.listdir("./"))  # 列举当前目录的内容
# print("=====")
# print(os.listdir("../"))   # 列举当前目录上层目录的内容

# =================6.综合案例:
# 1)文件复制,及注意事项
# 案例1:将一个文件复制到另一个副本中
# 步骤:1.先有一个文件,再新建一个问题,读取文件的内容,写入到新的文件中去,关闭文件
# src_file = open("a.txt", "r")
# dst_file = open("first/c.txt", "a")
# os.chmod(src_file, mode=0o777)    # 修改文件的属性,读写执行权限
# os.chmod(dst_file, mode=0o777)    # 修改文件的属性,读写执行权限
#
# while True:
#     content = src_file.read(1024)    # 一次读取1024个字节长度
#     if len(content) == 0:   # 判断读取的内容长度为0时,代表文件内容读取完毕,跳出循环
#         break
#     dst_file.write(content)
#
# src_file.close()
# dst_file.close()

# ========================
# 2)文件分类--思路--代码实现
# 将不同后缀名的文件分别放入到指定的目录
# 步骤分解:
# # 0.获取所有的文件列表
# import shutil    # shutil包中有可以移动文件的方法,shutil.move(file, folder)
# path = "files"
# if not os.path.exists(path):
#     exit()
# os.chdir("files")
# file_list = os.listdir("./")
# # print(file_list)
# # 1.遍历所有的文件
# for file_name in file_list:
#     # print(file_name)
#     # 2.分解文件的后缀名
#     # 2.1 获取最后一个“.”的索引 xx.00.txt
#     last_point_index = file_name.rfind(".")
#     if last_point_index == -1:   # 当没有检索到“.”时会返回-1
#         continue
#     # print(last_point_index)
#     # 2.2 根据这个索引位置,当作起始位置,来截取后续的所有字符串
#     extension = file_name[last_point_index + 1:]
#     print(extension)
#
#     # 3.查看一下,是否存在同名的目录
#     # 4.如果不存在这样的目录 -> 直接创建一个这样名称的目录
#     if not os.path.exists(extension):
#         os.mkdir(extension)
#     else:   # 5.目录存在 -> 移动过去
#         shutil.move(file_name, extension)
# ===================================
# 3)列表清单--代码实现
# 将文件夹中的所有目录和文件全部列举出来, 并将列举的内容信息,写到一个文件中去
import os, shutil
path = "files"
def listFilesToFile(dir, file):
    file_list = os.listdir(dir)
    for file_name in file_list:
        new_file_path = dir + "/" + file_name
        if os.path.isdir(new_file_path):
            # print(new_file_path)
            file.write(new_file_path + "\n")
            listFilesToFile(new_file_path, file)
        else:
            # print("\t" + file_name)
            file.write("\t" + file_name + "\n")
    print("\n")

f = open("list.txt", "a")
listFilesToFile(path, f)
# 7.基础阶段总结:总结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值