美文网首页
Python基础14-文件操作

Python基础14-文件操作

作者: Jacob_LJ | 来源:发表于2018-05-15 23:11 被阅读11次

Python基础-文件操作)

1 文件使用流程

1.1 打开

  • 打开文件函数
# open("文件", "模式")
f = open("a.text", "r")

# 文件:指定文件路径
# 模式:控制操作模式
  • 模式
模式 r w a r+ w+ a+
创建文件
覆盖内容
指针在开头
指针在末尾
默认模式
 r、w、a 默认用于处理文本文件
b :以二进制格式进行操作文件读写。如果文件是二进制文件,则选择此项。如:图片、视频、音频
所以,rb、wb、ab 模式就是用于处理二进制文件的,权限与 r、w、a 一样。
  • 注意,如果对同一文件先进行 读 操作,然后进行写操作的话。此时写入的内容是以追加方式进行的。因为读操作会移动指针到末尾。

1.2 读写

  • 定位
f.seek(offset, whence)

# offset 指定开始位置从1开始
# whence 取值范围 0,1,2
# 0 代表开头,默认值 
# 1 代表当前位置
# 2 代表文件末尾
# 注意
* 文本文件的操作模式下(不带b),只能写0
* 如果想要写1或2,必须在二进制文件操作模式下(带b) 
通过cmd+点击跳进函数方法,seek 函数没有描述,则可以通过下面步骤查看 seek 函数描述
  • 查看指针位置
f.tell() 
content = f.read()
# f.read(字节数)
#   字节数默认是文件内容长度
#   下标会自动后移

content = f.readline()
# f.readline([limit])
#   读取一行数据
#   limit
#       限制的最大字节数

content = f.readlines()
# f.readlines()
#   会自动的将文件按换行符进行处理
#   将处理好的每一行组成一个列表返回

f.readable()
# 判断是否可读

  • 注意
  1. 通过 open() 返回的句柄 f 是一个迭代器,可通过 isinstance(f, collection.iterator) 进行判断,需要导入 collection 模块。
  2. 因为文件句柄 f 是迭代器,那么它的数据处理并不是马上生成所有数据,而是需要的时候才产生(参考迭代器的使用)
  3. read() 和 readlines()方法都是读取全部内容,对于处理大容量文件要小心内存,但正因为全部加载进内存,也方便了后续多次对数据的处理
  4. readline() 逐行读取,for in 方法遍历 句柄 f等,它们适用于处理大数据文件
  5. 假设文件的内容并没有换行符,此时,使用的 readline() 或 for in 方法都是读取整个文件的,那么最保险的做法即使通过 read(n) 方法来指定读取字节数来分段处理
writeContent = f.write("xxxyyyy")
# 返回值是写入的字节长度
# 写完后,指针位置在文件末尾

f.writeable()
# 判断是否可写

1.3 关闭

f.close()
# 关闭一个打开的文件
# 关闭的原因:
* 可以释放系统资源
* 会立即清空缓冲区的数据,立即将内容写入到磁盘文件(因为写入的内容并非立即写入文档的,这样的机制是用于减少 I/O 频率)
* 如果不关闭的话,会存在丢失数据的风险

f.flush()
# 立即将缓冲区内容写入到文件中

1.4 相关例子代码

# 1. 打开文件
# 相对路径, 相对于哪一个目录下面的指定文件
f = open("a.txt", "r+")

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

f.write("88888")

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

2 文件相关操作

  • 模块
improt os
  • 重命名
os.rename(src, dst)
# os.rename("b.text", "xx.text")
# os.rename("wenjianjia", "wenjianjia2")
# 修改单级文件、文件夹名称

os.renames(old, new)
# os.renames("one/b.text", "two/bb.text")
# 修改多级文件、文件夹名称
  • 删除
删除文件
os.remove(path)
# 文件不存在会报错

删除目录
os.rmdir(path)
# 不能递归删除目录,os.rmdir(one/two), 只删除 two
# 如果文件夹非空,会报错

os.removedirs(path)
# 可以递归删除目录,os.rmdir(one/two), 删除one 和 one 内的 two
# 如果文件夹非空,会报错
  • 创建文件夹
os.mkdir("文件夹名"[, mode])
# 不能递归创建
# 只能创建第一级目录
# mode 指数字模式权限,默认 mode:int = 0o777
一般分为三组
* 文件拥有者
  - 读:r -> 4
  - 写:w -> 2
  - 可执行:x -> 1

* 同组用户
  - 读
  - 写
  - 可执行

* 其他用户
  - 读
  - 写
  - 可执行
  • 获取当前目录
os.getcwd()
  • 改变默认目录
os.chdir("目标目录")
  • 获取目录内容列表
os.listdir("./")
# 列举一级目录
# ./ 当前所在目录
# ../ 当前目录所在的上一级目录

3 参考案例

  • 将一个文件内容复制到另一个文件内
import os

os.chdir("files")

# 1. 只读模式, 打开要复制的文件
#   追加模式, 打开副本文件

# 编码格式一定要统一,所以会手动指定,如果不指定,默认就是 utf-8
source_file = open("d.txt", "r", encoding="utf-8") 
dst_file = open("d_bat.txt", "a", encoding="utf-8")



# 2. 从源文件中读取内容
#   写入到目标文件中

#content = source_file.read()
#dst_file.write(content)

# 优化读取
while True:
    content = source_file.read(1024)
    if len(content) == 0:
        break
    print("----", content)
    dst_file.write(content) # 因为读取操作,指针会自动移动到读取位置,所以内容是连续写入的


#3. 关闭源文件和目标文件
source_file.close()
dst_file.close()
  • 文件分类,并生成一个文件清单
步骤分析

1. 给定一批文件
a.avi、b.jpg、c.jpg、d.text、e.avi、f.text
2. 按照文件后缀名,划分到不同的文件里
* 文件夹命名:后缀名
* 结果:
avi - a.avi、e.avi
jpg - b.jpg、c.jpg
text - d.text、f.text

3. 生成 text 格式的文件清单

将在 files 文件夹下的文件按后缀名分类

 # 0, 获取所有的文件名称列表
 import os
 import shutil

 path = "files"

 if not os.path.exists(path):
     exit()

 os.chdir(path)
 file_list = os.listdir("./")
 # print(file_list)

 # 1. 遍历所有的文件(名称)
 for file_name in file_list:
     # print(file_name)
     # 2. 分解文件的后缀名
     # 2.1 获取最后一个.的索引位置 xx.oo.txt
     index = file_name.rfind(".")
     if index == -1:
         continue
     # print(index)
     # 2.2 根据这个索引位置, 当做起始位置, 来截取后续的所有字符串内容
     extension = file_name[index + 1:]
     print(extension)

     # 3. 查看一下, 是否存在同名的目录

     # 4. 如果不存在这样的目录 -> 直接创建一个这样名称的目录
     if not os.path.exists(extension):
         os.mkdir(extension)

     # 5, 目录存在 -> 移动过去
     shutil.move(file_name, extension)

按目录分类后,生成清单

import os

# file_list = os.listdir("files")
# print(file_list)

# 通过给定的文件夹, 列举出这个文件夹当中, 所有的文件,以及文件夹, 子文件夹当中的所有文件
def listFilesToTxt(dir, file):
    # 1. 列举出, 当前给定的文件夹, 下的所有子文件夹, 以及子文件
    file_list = os.listdir(dir)
    # print(file_list)
    # 2. 针对于, 列举的列表, 进行遍历
    for file_name in file_list:
        new_fileName = dir + "/" + file_name
        # 判定, 是否是目录, listFiles
        if os.path.isdir(new_fileName):
            # print(new_fileName)
            file.write(new_fileName + "\n")
            listFilesToTxt(new_fileName, file)
        else:
             # 打印下, 文件名称
            # print("\t" + file_name)
            file.write("\t" + file_name + "\n")
    # print("")
    file.write("\n")

f = open("list.txt", "a")
listFilesToTxt("files", f)

相关文章

  • Python基础14-文件操作

    1 文件使用流程 1.1 打开 打开文件函数 模式 注意,如果对同一文件先进行 读 操作,然后进行写操作的话。此时...

  • 文件操作

    Python基础教程 文件内容操作 python中的文件操作还是挺简单的,类似于php中的文件方法,精简好用。我们...

  • Python中txt的简单操作

    Python操作txt文件的基础操作记录,包含新建文件、读取文件、写入文件、替换文件、修改文件后缀和插入数据。1....

  • python的学习方向

    我的学习计划: 1、Python基础语法、python字符串解析、python时间和日历、python文件操作,数...

  • python的进修之路

    python基础篇(一)【变量,赋值,输入,输出和导入,运算符,数据类型,文件基本操作】 python基础篇(二)...

  • 2019-10-11

    深度学习第五天 python基础: 文件操作:'w'表示可写,‘...

  • 14.Python之文件操作

    Python之文件操作 文件操作通过Python中的内置函数open()对文件进行操作。文件操作需要如下几个参数:...

  • Python基础:python操作Excel文件

    Python 操作Excel 举例:读取excel表的数据,转为字典数据。 名称值XXXXXXXXXXXXXXXX...

  • Python3基础语法--文件操作

    Python3基础语法--文件操作 open() open() 方法用于打开一个文件,并返回文件对象,在对文件进行...

  • Python基础知识学习,文件操作是怎么回事

    Python基础知识如何入门?文件操作是怎么回事?Python入门简单、功能强大,是很多零基础或者想要转行进入IT...

网友评论

      本文标题:Python基础14-文件操作

      本文链接:https://www.haomeiwen.com/subject/yaysdftx.html