欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python文件操作

程序员文章站 2024-03-25 14:27:10
...

1、open函数

【例1-1】文件读写模式 w 、r 与 a

hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。\n\
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,\n\
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。"
# mode 读写模式,w只写,使用该模式时如果文件不存在时会创建文件,否则会清空文件,文件的指针默认在文件的开头
# file 文件路径  encoding 在写文件时为编码
f=open(file="话说明朝",mode="w",encoding="utf-8")
f.write(hsmc)   # 写入文件
f.flush()       # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close()       # 关闭文件
# a 以追加写模式打开文件,如果文件不存在则创建,文件指针自动移到文件末尾
f=open(file="话说明朝",mode="a",encoding="utf-8")
f.write("\n追加写入")
f.flush()       # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close()       # 关闭文件
# r 只读,默认模式   encoding 在读文件时为解码,文件的指针默认在文件的开头
f=open(file="话说明朝",mode="r",encoding="utf-8")
print(f.read())         # 读取整个文件
f.close()               # 关闭文件

  返回结果:

大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。
追加写入

【例1-2】文件读写模式 r+

hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。\n\
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,\n\
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。"
# mode 读写模式,w只写,使用该模式时如果文件不存在时会创建文件,否则会清空文件,文件的指针默认在文件的开头
# file 文件路径  encoding 在写文件时为编码
f=open(file="话说明朝",mode="w",encoding="utf-8")
f.write(hsmc)   # 写入文件
f.flush()       # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close()       # 关闭文件
# r+ 以读写模式打开文件,文件指针自动移到文件开头
f=open(file="话说明朝",mode="r+",encoding="utf-8")  
f.write("文件开头")    # 在文件开头处写入,会覆盖开头
f.seek(0)             # 调整光标位置
print(f.read())       # 读取文件
f.flush()       # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close()       # 关闭文件

   返回结果:

 文件开头说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。

【例1-3】文件读写模式 a+

hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。\n\
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,\n\
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。"
# mode 读写模式,w只写,使用该模式时如果文件不存在时会创建文件,否则会清空文件,文件的指针默认在文件的开头
# file 文件路径  encoding 在写文件时为编码
f=open(file="话说明朝",mode="w",encoding="utf-8")
f.write(hsmc)   # 写入文件
f.flush()       # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close()       # 关闭文件
# a+ 以追加读写模式打开文件,文件指针自动移到文件结尾
f=open(file="话说明朝",mode="a+",encoding="utf-8")
f.write("\n文件结尾")   # 在文件开头处写入
f.seek(0)               # 调整光标位置
print(f.read())         # 读取文件
f.flush()       # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close()       # 关闭文件

  返回结果: 

大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,正说反说不随便说,你敢听就来。
大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,
《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。
文件结尾

【例1-4】文件读写模式 wb 与 rb

hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!"
# mode 读写模式,wb只写,类似w,一般用于非文本文件
f=open(file="话说明朝",mode="wb")   # 二进制文件不需要encoding
f.write(hsmc.encode("utf-8"))
f.flush()         # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close()         # 关闭文件
# mode 读写模式,rb只读,类似r,一般用于非文本文件
f=open(file="话说明朝",mode="rb")   # 二进制文件不需要encoding
print(f.read())
f.flush()         # 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close()         # 关闭文件

  返回结果:

b'\xe5\xa4\xa7\xe5\xae\x87\xe8\x8c\xb6\xe9\xa6\x86\xe8\xaf\xb4\xe9\x80\x9a\xe5\x8f\xb2\xef\xbc\x8c\xe5\xac\x89\xe7\xac\x91\xe6\x80\x92\xe9\xaa\x82\xe8\xae\xb2\xe8\xaf\x84\xe4\xb9\xa6\xef\xbc\x81'

【文件打开模式完整列表】

模式 描述
r 以只读方式打开文件;指针默认在文件的开头,默认此模式。
rb 以二进制格式、只读方式打开一个文件;指针默认在文件的开头,一般用于非文本文件。
r+ 以读写方式打开文件;指针默认在文件的开头。
rb+ 以二进制格式、读写方式打开一个文件;指针默认在文件的开头,一般用于非文本文件。
w 以只写方式打开文件;如果文件存在则打开文件,并清空文件,如果文件不存在,创建新文件,指针默认在文件的开头。
wb 以二进制格式、只读写方式打开一个文件;如果文件存在则打开文件,并清空文件,如果文件不存在,创建新文件,指针默认在文件的开头,一般用于非文本文件。
w+ 以写读方式打开文件,如果文件存在则打开文件,并清空文件,如果文件不存在,创建新文件,指针默认在文件的开头。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a 以追加写的方式打开文件;指针默认在文件的结尾,如果该文件不存在,创建新文件。
ab 以二进制格式追加写的方式打开文件;指针默认在文件的结尾,如果该文件不存在,创建新文件。
a+ 以追加读写的方式打开文件;指针默认在文件的结尾,如果该文件不存在,创建新文件。
ab+ 以二进制格式追加读写的方式打开文件;指针默认在文件的结尾,如果该文件不存在,创建新文件。

【例1-5】文件属性

# mode 读写模式,wb只写,类似w,一般用于非文本文件
f=open(file="话说明朝",mode="w",encoding="utf-8")   
print(f.closed)       # 判断文件是否关闭
print(f.name)         # 获取文件的名字
print(f.mode)         # 获取文件的访问模式
f.close()         # 关闭文件

  返回结果: 

False
话说明朝
w

【例1-6】with

# with 会自动调用f.close() 并且还支持同时打开多个文件
with open(file="话说明朝",mode="w",encoding="utf-8") as f:
    print(f.name)         # 获取文件的名字
print(f.closed)           # 判断文件是否关闭

  返回结果: 

话说明朝
True

【例1-7】文件指针

hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!"
# seek() 查看文件指针的位置,单位为字节
with open(file="话说明朝",mode="a+",encoding="utf-8") as f:
    f.write(hsmc)
    print(f.tell())
    f.seek(5,0)      # 第二个默认为0,相对文件开头的移动,第一个参数为偏移量
    print(f.tell())  # 查看文件指针的位置

 返回结果: 

48
5

【例1-8】文件读取

hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,\n\
正说反说不随便说,你敢听就来。大宇话说系列第五部,话说明朝!\n\
本节目改编自当年明月著作《明朝那些事儿》,南明部分取自洪兵著作《南明那些事儿》,\n\
书籍已经多次再版,各位可自行购买正版书籍。"
with open(file="话说明朝",mode="w",encoding="utf-8") as f:
    f.write(hsmc)
    f.flush()
with open(file="话说明朝",mode="r",encoding="utf-8") as f:
    for i in f:              # 分行读取,迭代器的方式,方便读取大文件
        print(i,end="")
print("\n"+"-"*120)
with open(file="话说明朝",mode="r",encoding="utf-8") as f:
    print(f.readline())      # 读取一行,如果加参数读取指定字符,最多读取一行
    f.seek(188)              # 这里有一个问题如果放在字符中间会导致解码错误
    print(f.readlines())     # 一次性读取文件的所有内容,并且返回一个列表

  返回结果: 

大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,
正说反说不随便说,你敢听就来。大宇话说系列第五部,话说明朝!
本节目改编自当年明月著作《明朝那些事儿》,南明部分取自洪兵著作《南明那些事儿》,
书籍已经多次再版,各位可自行购买正版书籍。
---------------------------------------------------------------------------------------------------------------------
大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史,
['话说明朝!\n', '本节目改编自当年明月著作《明朝那些事儿》,南明部分取自洪兵著作《南明那些事儿》,\n', '书籍已经多次再版,各位可自行购买正版书籍。']

2、os模块 

 【例2-1】OS模块操作文件

import os
print(os.getcwd())           # 返回当前文件的目录地址
print(os.listdir())          # 返回当前目录的所有文件夹和文件
# os.remove("文件地址或文件名")      # 删除文件,如果文件在当前目录可以直接用文件名
# os.removedirs("文件地址或文件名")  # 删除空目录,如果待删除目录在当前目录可以直接用目录名
# os.path.isfile("文件地址或文件名")    # 判断是否是文件
# os.path.isdir("文件地址或文件名")     # 判断是否是目录
# os.path.isabs("文件地址")             # 判断是否是绝对路径
# os.path.exists(r"文件地址")           # 判断文件地址是否存在,取消转义
# 分离扩展名,返回元组
print(os.path.splitext(r"c:\Users\12246\Desktop\资料\index.html"))
# 分离最后一级文件地址,返回元组
print(os.path.split(r"c:\Users\12246\Desktop\资料\index.html"))
# 返回使用平台,Windows平台返回"nt",Linux/Unix平台返回"posix"
print(os.name)
# os.system("命令")   # 执行shell命令
# a=os.path.getsize(r"文件地址")   # 获取文件大小,注意文件大小,单位为字节
# os.mknod("红楼梦.txt")     # Windows上的Python不支持mknod函数,会报错
os.mkdir("单级目录")         # 创建单级目录,目录存在时报错
os.makedirs("t1/t2")         # 创建单级目录,目录存在时报错
# os.stat("123")             # 获取文件的属性,包括文件的大小等等

  返回结果: 

D:\Code\python练习\模块
['123', 'exercise.py', 'my_module.py', 'text', '__pycache__', '单级目录', '话说明朝']
('c:\\Users\\12246\\Desktop\\资料\\index', '.html')
('c:\\Users\\12246\\Desktop\\资料', 'index.html')
nt

【2-2】获取桌面路径(1)

# 通过注册表来获取当前windows桌面绝对路径,无需安装第三方库,推荐使用
import winreg
def desktopPath():
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,\
                         "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
    return winreg.QueryValueEx(key, "Desktop")[0]
print("桌面路径:",desktopPath())

  返回结果:

桌面路径: C:\Users\12246\Desktop

【2-3】获取桌面路径(2)

# 通过os模块获取,改变了桌面路径后,可能会失效。
import os
def desktopPath():
    # os.path.join(path, *paths) 组合成一个新目录
    return os.path.join(os.path.expanduser("~"), 'Desktop')
print("桌面路径:",desktopPath())

  返回结果:

桌面路径: C:\Users\12246\Desktop

【2-4】计算目录下的所有文件和文件夹的数量和总大小( 递归可参考

import os
size=0
fileNumber=0
dirNumber=0
def fileInfo(path):
    global size                                  # global修改全局变量
    global fileNumber
    global dirNumber
    if os.path.isfile(path):                      # 判断是否是文件
        fileNumber = fileNumber + 1               # 统计文件数量
        size = size + os.path.getsize(path)       # 统计文件总大小
    else:
        for list in os.listdir(path):             # 目录下所有文件列表
            joinPath = os.path.join(path, list)   # 组合
            if os.path.isfile(joinPath):
                fileNumber = fileNumber + 1       # 统计文件数量
                size = size + os.path.getsize(joinPath)     # 统计文件总大小
            elif os.path.isdir(joinPath):
                dirNumber = dirNumber + 1         # 统计文件夹数量
                fileInfo(joinPath)                # 递归调用计算该文件夹下面的内容
# 文件地址
path=r"d:\英雄时刻"
fileInfo(path)
print("文件大小:"+str(size)+"B")
print("文件数量:"+str(fileNumber)+"个")
print("文件夹数量小:"+str(dirNumber)+"个")

    返回结果:

文件大小:1874661880B
文件数量:7个
文件夹大小:4个

Python文件操作

【2-5】修改文件

import os
hsmc="大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史, \n\
正说反说不随便说,你敢听就来。大宇话说系列第五部,话说明朝!本节目改编自当年明月著作《明朝那些事儿》,\n\
南明部分取自洪兵著作《南明那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。"
with open("话说明朝","w",encoding="utf-8") as f:   # 创建文件
    f.write(hsmc)
with open("话说明朝","a+",encoding="utf-8") as f:      
    with open("话说明朝1", "w", encoding="utf-8") as fnew:   # 同时打开两个文件
        f.seek(0)             # 注意文件指针这个坑
        for i in f:
            if "明" in i:
                fnew.write(i.replace("明","日月"))   # 替换字符
            else:
                fnew.write(i)
os.remove("话说明朝")         # 删除原文件
os.renames("话说明朝1","话说明朝")
with open("话说明朝","r",encoding="utf-8") as f:   # 创建文件
    print(f.read())

  返回结果: 

大宇茶馆说通史,嬉笑怒骂讲评书!通俗的语言,诙谐的讲述,正史野史杂文稗史, 
正说反说不随便说,你敢听就来。大宇话说系列第五部,话说日月朝!本节目改编自当年日月月著作《日月朝那些事儿》,
南日月部分取自洪兵著作《南日月那些事儿》,书籍已经多次再版,各位可自行购买正版书籍。