Python 文件操作

旧城等待, 2023-06-01 06:21 13阅读 0赞

一、方法介绍

Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。

注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

  1. 1 # open函数的语法格式
  2. 2
  3. 3 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  4. 4 file: 必需,文件路径(相对或者绝对路径)。
  5. 5 mode: 可选,文件打开模式
  6. 6 buffering: 设置缓冲
  7. 7 errors: 报错级别
  8. 8 newline: 区分换行符
  9. 9 closefd: 传入的file参数类型

mode的参数有:


























































模式


描述


r


以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。


w


打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。


a


打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。


rb


以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。


r+


打开一个文件用于读写。文件指针将会放在文件的开头。先读后写才是安全的


rb+


以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。


w+


打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件


wb+


以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。


wb


以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。


ab


以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。


a+


打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。


ab+


以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

file中的常用方法:






















































方法


描述


file.close()


关闭文件。关闭后文件不能再进行读写操作。


file.flush()


刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。


file.next()


返回文件下一行


file.read([size])


从文件读取指定的字节数,如果未给定或为负则读取所有


file.readline([size])


读取整行,包括 “\n” 字符。


file.readlines([sizehint])


读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint


字节的行, 实际读取值可能比sizhint较大, 因为需要填充缓冲区。


file.seek(offset[, whence])


设置文件当前位置


file.tell()


返回文件当前位置。


file.truncate([size])


截取文件,截取的字节通过size指定,默认为当前文件位置。


file.write(str)


将字符串写入文件,没有返回值


file.writelines(sequence)


向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

二、文件的操作

2.1 读取文件

2.1.1 read

  1. 1 # 路径有两种:
  2. 2 # 1.相对路径,相对于当前程序所在的文件夹
  3. 3 # ../ 返回上一层目录
  4. 4 # 相对的是当前程序所在的文件夹
  5. 5 # 2.绝对路径
  6. 6 # * 从磁盘根目录寻找
  7. 7 # * 互联网上的绝对路径
  8. 8
  9. 9 f = open("a.txt", mode="r", encoding="utf-8")
  10. 10
  11. 11 # read函数的参数是读取多少个字节,如果不加参数,默认是一次性读取文件的所有内容
  12. 12 data = f.read()
  13. 13 # 打印读取的文件内容
  14. 14 print(data)
  15. 15
  16. 16 # 关闭文件
  17. 17 f.close()

2.1.2 readlines

就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

  1. f = open("a.txt", mode="r", encoding="utf-8")
  2. data = f.readlines()
  3. # 打印读取的文件内容
  4. print(type(data)) # <class 'list'>
  5. # 关闭文件
  6. f.close()

2.1.3 readline

读取一行数据

  1. f = open("a.txt", mode="r", encoding="utf-8")
  2. # 只读取一行数据
  3. data = f.readline()
  4. # 打印读取的文件内容
  5. print(data)
  6. # 关闭文件
  7. f.close()

2.1.4 读取大文件

  1. f = open("a.txt", mode="r", encoding="utf-8")
  2. # 读取大文件的方法
  3. for line in f:
  4. print(line)
  5. # 关闭文件
  6. f.close()

对可迭代对象 f,进行迭代遍历:for line in f,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。

2.2 写文件

  1. 1 # w 模式写文件会将源文件覆盖
  2. 2 f = open("a.txt", mode="w", encoding="utf-8")
  3. 3
  4. 4 f.write("aaa")
  5. 5 # 关闭
  6. 6 f.close()
  7. 1 # 追加
  8. 2 f = open("a.txt", mode="a", encoding="utf-8")
  9. 3 f.write("ddd")
  10. 4 f.flush()
  11. 5 f.close()
  12. 1 # r+ 默认模式指针在文件的开头
  13. 2 # f = open("老师点名", mode="r+", encoding="utf-8")
  14. 3 # s = f.read()
  15. 4 # print(s)
  16. 5 # f.write("周杰伦")
  17. 6 # f.close()
  18. 7 # 神坑
  19. 8 f = open("精品", mode="r+", encoding="utf-8")
  20. 9 s = f.read(3) # 读3个字符
  21. 10 # 不管你前面读了几个,后面去写都是在末尾
  22. 11 f.write("aabbcc") # 没有任何操作之前进行写,在开头写,如果读取了一些内容后再写,则是在最后
  23. 12 f.flush()
  24. 13 f.close()

文件内的光标移动

  1. 1 一: read(3):
  2. 2   1. 文件打开方式为文本模式时,代表读取3个字符
  3. 3   2. 文件打开方式为b模式时,代表读取3个字节
  4. 4 二: 其余的文件内光标移动都是以字节为单位如seektelltruncate
  5. 5 seek(offset[, whence])
  6. 6 offset -- 开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始
  7. 7 whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。
  8. 8
  9. 9
  10. 10 注意:
  11. 11   1. seek有三种移动方式012,其中12必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
  12. 12   2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用ww+等方式打开,因为那样直接清空文件了,所以truncate要在r+或aa+等模式下测试效果
  13. 13
  14. 1 #!/usr/bin/python3
  15. 2
  16. 3 # 打开文件
  17. 4 fo = open("runoob.txt", "r+")
  18. 5 print ("文件名为: ", fo.name)
  19. 6
  20. 7 line = fo.readline()
  21. 8 print ("读取的数据为: %s" % (line))
  22. 9
  23. 10 # 重新设置文件读取指针到开头
  24. 11 fo.seek(0, 0)
  25. 12 line = fo.readline()
  26. 13 print ("读取的数据为: %s" % (line))
  27. 14
  28. 15
  29. 16 # 关闭文件
  30. 17 fo.close()

2.3 with操作

  1. 1 为了避免打开文件后忘记关闭,可以通过管理上下文,即:
  2. 2   with open('log','r') as f:
  3. 3 如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
  4. 4
  5. 5 Python 2.7 后,with又支持同时对多个文件的上下文进行管理即:
  6. 6 with open('log1') as obj1, open('log2') as obj2:
  7. 1 with open("a.txt", mode="r", encoding="utf-8") as f:
  8. 2 data = f.read()
  9. 3 print(data)

ContractedBlock.gif ExpandedBlockStart.gif

  1. # 提示输入文件
  2. oldFileName = input("请输入要拷贝的文件名字:")
  3. # 以读的方式打开文件
  4. oldFile = open(oldFileName,'rb')
  5. # 提取文件的后缀
  6. fileFlagNum = oldFileName.rfind('.')
  7. if fileFlagNum > 0:
  8. fileFlag = oldFileName[fileFlagNum:]
  9. # 组织新的文件名字
  10. newFileName = oldFileName[:fileFlagNum] + '[复件]' + fileFlag
  11. # 创建新文件
  12. newFile = open(newFileName, 'wb')
  13. # 把旧文件中的数据,一行一行的进行复制到新文件中
  14. for lineContent in oldFile.readlines():
  15. newFile.write(lineContent)
  16. # 关闭文件
  17. oldFile.close()
  18. newFile.close()

文件备份

2.4 文件的相关操作

  1. 1 import os
  2. 2
  3. 3 # 文件重命名
  4. 4 os.rename("毕业论文.txt", "毕业论文-最终版.txt")
  5. 5
  6. 6 # 删除文件
  7. 7 os.remove("毕业论文.txt")
  8. 8
  9. 9 # 创建文件夹
  10. 10 os.mkdir("abc")
  11. 11
  12. 12 # 获取当前目录
  13. 13 os.getcwd()
  14. 14
  15. 15 # 改变默认目录
  16. 16 os.chdir("../")
  17. 17
  18. 18 # 获取目录列表
  19. 19 os.listdir("./")
  20. 20
  21. 21 # 删除文件夹
  22. 22 os.rmdir("abc")

ContractedBlock.gif ExpandedBlockStart.gif

  1. # 创建新文件,把修改后的文件写入新文件,删除老文件,再重命名新文件
  2. import os
  3. with open("吃的", mode="r", encoding="utf-8") as f1, \
  4. open("吃的_副本", mode="w", encoding="utf-8") as f2:
  5. for line in f1:
  6. new_line = line.replace("肉", "菜")
  7. f2.write(new_line)
  8. os.remove("吃的") # 删除文件
  9. os.rename("吃的_副本", "吃的") # 重命名文件

修改文件内容

ContractedBlock.gif ExpandedBlockStart.gif

  1. #coding=utf-8
  2. # 批量在文件名前加前缀
  3. import os
  4. funFlag = 1 # 1表示添加标志 2表示删除标志
  5. folderName = './renameDir/'
  6. # 获取指定路径的所有文件名字
  7. dirList = os.listdir(folderName)
  8. # 遍历输出所有文件名字
  9. for name in dirList:
  10. print name
  11. if funFlag == 1:
  12. newName = '[东哥出品]-' + name
  13. elif funFlag == 2:
  14. num = len('[东哥出品]-')
  15. newName = name[num:]
  16. print newName
  17. os.rename(folderName+name, folderName+newName)

批量修改文件名

转载于:https://www.cnblogs.com/fengyuhao/p/11479982.html

发表评论

表情:
评论列表 (有 0 条评论,13人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python文件操作

    文件基礎操作: 文件操作類型分為:文本操作、二進制操作 文件操作步驟: 打開文件。方法:open(“文件路徑”, “操作模式”),返回一個可操作的文件對象。

    相关 python 文件操作

    对于文件,我们通常有以下几种操作: 读操作 写操作 文件类型拷贝 图片类型的拷贝 文件的读取方式 1、第一种方式 打开文件,读取,关闭文件

    相关 Python 文件操作

    文件操作 open() 打开 file 文件的位置(路径) mode 操作文件的模式 encoding() 文件编码方式 f 文件句柄 操作文件: