python文件与文件夹相关操作

python文件与文件夹相关操作

作用:把一些数据存储起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份。可持久化存储数据

一、文件的打开和关闭(文件)

1、打开文件
1.1 open
  • 语法格式:

    文件变量 = open(“文件名”, “访问模式”)

    • 文件名:也是路径,默认当前目录下路径。
  • 注意:文件名和访问模式都是字符串格式

"""
文件操作流程
1、打开文件,或者新建一个文件(不可缺)
2、读/写数据(先将写入数据内容写入内存)
3、关闭数据(不可缺)(关闭同时会保存数据,如果不调用文件关闭函数,程序关闭时也会保存文件内容)
"""
# 'w':只写方式是打开文件,文件存在会清空文件内容,文件不存在则删除文件。
f = open("xxx.txt", 'w')
# 文件关闭
f.close()
1.2 访问模式说明
访问模式说明
r只读, 默认模式。文件的指针放在文件的开头。文件不存在,会报错。
w只写。文件存在则重新开始编辑, 文件不存在,创建新文件。
a追加。文件存在则追加内容, 文件不存在,创建新文件。
r+读写。文件的指针放在文件的开头。文件不存在,会报错。(尽量不要使用读写操作,两个光标,不方便判断光标位置)
w+读写。文件存在则重新开始编辑。文件不存在,创建新文件。(尽量不要使用读写操作,管理光标比较麻烦)
a+读写。文件的指针将在文件的结尾。文件存在则追加内容, 文件不存在,创建新文件。(尽量不要使用读写操作,管理光标比较麻烦)
rb二进制格式的只读操作,默认模式。
wb二进制格式的只写操作。文件存在则重新开始编辑, 文件不存在,创建新文件。
ab二进制格式的追加操作。文件的指针放在文件的结尾。文件存在则追加内容, 文件不存在,创建新文件。
rb+二进制读写。文件的指针放在文件的开头。文件不存在,会报错。(尽量不要使用读写操作)
wb+二进制读写。文件存在则重新开始编辑, 文件不存在,创建新文件。(尽量不要使用读写操作)
ab+二进制追加。文件的指针放在文件的结尾。文件存在则追加内容, 文件不存在,创建新文件。(尽量不要使用读写操作)
1.3 绝对路径与相对路径
  • 绝对路径:是指文件在硬盘上真正存在的路径,是电脑完整的路径。

    • 例如:在windows平台下:E:\code\Pycode

      ** 注意:写代码时,windows下的路径\ 需改为\\ 或者改为/,在python中\为转义字符。

      eg: E:\\code\\Pycode\\abc.txt

      `E:/code/Pycode/abc.txt`  (推荐这种写法)
      

      r"E:\code\Pycode\abc.txt"

  •   相对路径:相对于自己目标文件的位置**(推荐使用相对路径)**
    

    1.txt :等价于./1.txt ,当前路径下的1.txt

    ../1.txt:上一级路径下的1.txt

    ../../1.txt:上一级的上一级路径下的1.txt

2、关闭文件
  • 作用:关闭文件,为了释放资源。关闭时会保存文件内容。
2.1 手动关闭文件
  • 语法格式:

    文件对象.close()

    # 打开文件
    # f = open("xxx.txt", 'w')
    # 文件关闭
    # f.close()
    
2.2 自动关闭文件
  • 语法格式:

    with open(“文件名”, “访问模式”) as 文件变量:

    ​ 文件操作

with open("xxx.txt", 'w') as f:
    pass  # 执行完缩进代码, 会自动关闭文件

二、文件的读写(文件内容)

1、写数据
1.1 write()
  • 语法格式:

    文件对象.write(“写入内容”)

    # 文件
    f = open('xxx.txt', 'w')
    # 文件写入
    f.write("hello abd")
    f.write("hello python")
    f.write("hello world")
    # 文件关闭
    f.close()
    
    # # 拓展:在死循环中写入文件时,就需要调用文件关闭函数, 才会将数据写入文件。
    f = open('xxx.txt', 'w')
    while True:
        f.write("hello abd")
        f.write("hello python")
        f.write("hello world")
        f.close()
    # 报错:ValueError: I/O operation on closed file.
    # 原因:文件关闭后,再执行文件写入操作,就会报此错
    
1.2 编码格式
  • open打开文件,windows下默认使用 gbk(简繁体中文)编码

  • 通用的编码为:utf-8(万国码)

    # open打开文件,windows下默认使用gbk(简繁体中文)编码
    # 打开文件(utf-8)--指定编码格式--utf-8(万国码),三个字节对应一个中文字符
    f = open("xxx.txt", 'r', encoding="utf-8")
    r = f.read()  # 你好张三
    print(r)
    
    # 打开文件(gbk)--指定编码格式--gbk,两个字节对应一个中文字符
    f = open("xxx.txt", 'r', encoding="gbk")
    r = f.read()  # 你好张三
    print(r)
    
2、读数据
2.1 read()
  • 语法格式:

    内容变量 = 文件对象.read(n)

    n为读取的字符数,不设置则全部读取

  • 根据数据长度依次读取数据内容,下一次读取内容接着上一次内容的结尾。

    # 打开文件
    f = open("xxx.txt", "r")
    
    # 文件比较大时,分次依次读取
    r = f.read(4)
    print(r)  # hell
    r = f.read(7)
    # 回车符算一个字符
    print(r)  # o abc
              # h
    r = f.read(4)
    print(r)  # ello
    
    # 文件比较小时,可以直接读取全部内容
    r = f.read()
    print(r)  # hello abc
              # hello world
              # hello python
              # hello sery
                
    # 关闭文件
    f.close()
    
2.2 readlines()

作用:一次全部读出,读出所有的行。按行作为分割条件,并返回列表(每行内容是一个元素)

  • 语法格式:

    内容列表变量 = 文件对象.readlines()

    • xxx.txt文件内容如下:
    hello abc
    hello world
    hello python
    hello sery
    
    f = open("xxx.txt", 'r')
    data = f.readlines() 
    print(data)  # ['hello abc\n', 'hello world\n', 'hello python\n', 'hello sery']
    
    # 通过for读出每行数据
    for item_str in data_list:
        print(item_str)  # hello abc
    
                         # hello world
                         # 
                         # hello python
                         # 
                         # hello sery
                         #
    # f.close()
    
2.3 readline()

作用:每次读取一行数据

  • 语法格式:

    内容变量 = 文件对象.readline(字符数)

f = open("xxx.txt", "r")
r = f.readline()
print(r)  # hello abc

# 循环读取每行内容
# 循环读取每行内容
while True:
    r = f.readline()
     # 方法一:判断读取到文件结尾
     if r == '':  # 读取不到任何字符内容
         break
     print(r, end="") 
    # 方法二
    if r:
        print(r, end="") 
    else:
        break
        
运行结果:
hello abc
hello world
hello python
hello sery

三、文件的相关操作(文件)

有时候,需要对文件进行重命名、删除等一些操作,Python的 os 模块中都有这种功能。

  • 导入模块import os·
1、文件重命名
  • 语法格式: os.rename(旧的文件名,新的文件名)
import os
# 文件重命名
os.rename("xxx.txt", "xxx1.txt")
2、删除文件
  • os模块中的remove()可以完成对文件的删除操作。删除文件夹,会报错。

  • 语法格式:os.remove(待删除的文件名)

    import os
    # 删除文件
    os.remove("test.txt")
    
3、创建文件夹
  • 只能创建文件夹,不能创建普通文件

  • 语法格式:os.mkdir(文件夹名字)

    import os
    # 创建文件夹,只能创建文件夹,不能创建普通文件
    os.mkdir("张三")
    
4、删除空文件夹
  • 删除文件夹,只能删除空的文件夹

  • 语法格式:os.rmdir(待删除的文件夹名)

    import os
    # 删除文件夹,"张三"文件夹为非空
    os.rmdir("张三")  # 报错,OSError: [WinError 145] 目录不是空的。: '张三'
    
    # 删除文件夹,"张三"文件为非空
    # 先删除文件夹里面的文件
    os.remove("./张三/aa")
    # 再删除空文件夹
    os.rmdir("张三")
    
5、获取当前目录
  • 获取当前的工作路径

  • 语法格式:路径变量 = oa.getcwd

    import os
    # 获取当前目录current_work_dir
    path = os.getcwd()
    print(path)  # O:\File\program\Day06
    
6、改变默认目录
  • 改变默认目录,切换指定的路径

  • 语法格式:os.chdir(改变的路径)

    …/…/张三/a

import os
# 改变路径
os.chdir("张三")
os.remove("a")
# 切换到上一级路径
os.chdir("../")
os.rmdir("张三")
7、获取目录列表
  • 获取某个目录的文件信息,获取文件夹或文件的名字

  • 语法格式:目录列表变量 = os.listdir(指定某个目录)

    • 如果不指定目录,默认当前路径
    # 获取目录列表
    file_list = os.listdir()
    print(file_list)
    # ['0', '1', 'A', 'B', 'C', 'D', 'info.txt', 'x', 'xxx.txt', 'xxx[备份].txt', '文件.py']
    
    # 指定目录
    file_list = os.listdir("..\Day06")
    print(file_list)
    # ['0', '1', 'A', 'B', 'C', 'D', 'info.txt', 'x', 'xxx.txt', 'xxx[备份].txt', '文件.py']
    
8、判断文件是否存在

语法格式:os.path.exists(需要判断的文件)

  • 如果文件存在返回True,如果文件不存在返回False

    # 判断文件是否存在
    value = os.path.exists("张三")
    print(value)  # True
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值