Python文件操作

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个

【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())

  返回结果: 

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值