美文网首页
Python学习笔记4

Python学习笔记4

作者: MetaT1an | 来源:发表于2018-08-28 22:59 被阅读0次

文件

  • 操作模式
  • 文件指针的定位
  • 遍历
  • 其他操作
  • 文件相关案例

文件

操作模式

  • r

    # 以只读方式打开文件(默认),文件的指针会放在文件的开头
    # 若文件不存在,会报错
    f = open("a.txt", "r")        # 在同级目录下打开文件
    
    content = f.read()
    print(content)
    
  • w

    # 以只写方式打开文件,文件的指针也在文件开头,进行覆盖写入(先清空后写入)
    # 若文件不存在,会创建一个新的文件
    f = open("a.txt", "w")
    f.write("66666")
    
  • a

    # 与 w唯一不同的是,文件的指针会放在文件的末尾
    # 追加写入
    
  • 增加b操作

    # 以二进制的方式进行文件操作 rb, wb, ab
    
    # 将一张图片的一半内容写入到另外一个图片中
    # 第二章图片可以打开浏览,只有第一张一半的内容,也可能是图片质量下降(我测试的是这种情况)
    
    fromFile = open("pic.jpg", "rb")
    content = fromFile.read()
    fromFile.close()
    
    writeLen = len(conten) // 2
    
    toFile = open("pic2.jpg", "wb")
    toFile.write(content[0:writeLen])
    toFile.close()
    

文件指针的定位

f = open("a.txt", "r")      # 当前文件内容:12345678

print(f.tell())         # 获得当前文件指针的位置 0
f.seek(2)               # 向后移动两个单位
print(f.tell())         # 2
print(f.read())         # 345678
print(f.tell())         # 8

# seek(offset, whence=0)
# whence表示指定文件指针所在的位置
# whence=0:文件开始处,offset >= 0
# whence=1:当前的位置,offset is free
# whence=2:文件结尾处,offset <= 0

# 但是对于不带 b的文件操作,whence只能为 0

文件读操作

  • f.read(length):
    # length默认是文件所有内容的长度,文件指针自动向后移动
    
    f = open("a.txt", "r")    # 文件内容:12345
    content = f.read(2)       
    print(content)            # 12
    print(f.tell())           # 4
    
  • readline(limit):
    # 读取一行数据,会读入文件中的换行符
    # limit:限制的最大字符数
    
    f = open("a.txt", "r")    # 文件内容:123\n456\n
    
    # 读出的换行符是有换行作用的
    print(f.readline(2))       # 12(有换行,print函数加上的)
    print(f.readline(), end='')        # 3(有换行, 文本自带的)
    print(f.readline(), end='')       # 456(有换行, 文本自带的)
    
  • readlines():
    # 按照换行符对文件内容进行处理,处理好的每一行组成一个列表返回
    
    f = open("a.txt", "r")    # 文件内容:123\n456\n
    printf(f.readlines())     # ['123\n', '456\n']
    

遍历

# 直接遍历文件
f = open("a.txt", "r")

for i in f:
    print(i, end='')    

# 遍历 readlines()的结果
lines = f.readlines()
for line in f:
    print(line, end='')

文件关闭

  • 释放系统资源
  • 将内存缓冲区中的内容同步到磁盘中
  • 文件写入内容时,并不是立即写入到磁盘文件,而是在对应的内存缓冲区做修改,当文件关闭时,再一次性将这些修改拷贝到磁盘。
  • f.flush() 可以强制刷新内容到磁盘。

其他操作

  • 依赖于os模块
  • 重命名
    import os
    
    os.rename("b.txt", "a.txt")   # 更改文件名称
    os.rename("dir1", "dir2")     # 更改目录名称
    
  • 删除
    import os
    
    os.remove("b.txt")    # 删除 b.txt
    
    os.rmdir("dir1/dir2")     # 删除了 dir2目录,若目录不为空,则无法删除
    os.rmdirs("dir1/dir2")    # 递归删除,若dir1为空,也删除
    
  • 创建目录
    import os
    # mkdir(path, mode)   # mode=0o777 //权限设定方式参照 Linux
    
    os.mkdir("dir1")      # 一次只能创建一个目录,不能递归创建多个目录
    
  • 路径相关操作
    # os.getcwd() 获得当前的目录
    # os.chdir()  改变当前所在路径
    # os.listdir()    获得目录下文件列表
    

文件相关案例

  • 文件复制
import os

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

scr_file = open("d.txt", "r", encoding="utf-8")
obj_file = open("d_copy.txt", "w", encoding="utf-8")

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

while True:
    content = scr_file.read(1024)   # 如果文件过大,分块写入
    if not content:
        break
    else:
        obj_file.write(content)
        
# 关闭源文件和目标文件
scr_file.close()
obj_file.close()
  • 文件分类,生成文件清单
import os

file_list = os.listdir(".")
res = {}

for file in file_list:
    if "." not in file:     # 排除掉目录
        continue

    appendix = file.split(".")[-1]      # 获得扩展名
    
    if appendix not in res:
        res[appendix] = []
    
    res[appendix].append(file)

print(res)

相关文章

网友评论

      本文标题:Python学习笔记4

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