【Python】(6) 文件操作

一、文件路径

  • 绝对路径:文件完整路径。
  • 相对路径:相对于当前工作目录的路径。当前路径下 ./,父路径下 ../。字符串里面 \ 有特殊含义转移符号,所以路径划分要么**/** 要么**\\**。
  • 查当前工作目录:python 项目里的当前工作目录就是项目的路径。
python 复制代码
代码:
import os
print(os.getcwd())

结果:
D:\Python\firstProject

二、文件打开与关闭

1、打开

  • open(文件路径, 打开模式)
  • 三种打开模式:读 r (文件不存在抛出异常),清空写 w (文件存在会先清空原本的内容,文件不存在会创建),追加写 a (文件不存在会创建,在原本内容后继续写)。打开二进制 文件就是在三种模式后加b :rb、wb、ab;可读可写加+:r+(游标在开头位置,写多少覆盖多少)、w+(全清空,游标在开头)、a+(游标在末尾)。
  • 返回文件对象。
python 复制代码
hello.py 代码:
open("file.txt", 'r')

2、关闭

  • 文件对象.close()
  • 如果不关闭会一直占用硬件资源,导致最后资源不够抛出异常。
  • 虽然 python 程序结束,python 的垃圾回收机制会自动回收文件对象,但是回收有延迟,最好程序手动回收。
python 复制代码
f = open("file.txt", 'r')
f.close()

3、上下文管理器

  • 使用with open() as f: 的语法会在代码块结束后自动关闭文件对象。
python 复制代码
with open("file.txt", 'r') as f:
    lines = f.readlines()
    print(lines)

三、文件的读写

1、读

  • 读指定字符个数的内容:文件对象**.read(字符个数)**
  • 读取内容的一行:文件对象**.readline()** ,参数可填字符个数
  • 读内容所有行:文件对象**.readlines()** ,参数可填行数
  • 读整个文件的两种方式:
python 复制代码
方式1:迭代,end 表示 print 末尾不加 /n,用空代替
with open("file.txt", 'r') as f:
    for line in f:
        print(line, end='')

方式2:readlines 读所有内容,再一行行打印
with open("file.txt", 'r') as f:
    lines = f.readlines()
    for line in lines:
        print(line, end='')

结果:
hello
world

2、写

  • 文件对象.write(内容)
python 复制代码
with open("file.txt", 'w', encoding='utf-8') as f:
    f.write("世界,你好!")

3、中文字符编码问题

  • 读中文的时候可能会出现乱码:
python 复制代码
代码:
with open("file.txt", 'r') as f:
    print(f.read(2))

结果:
浣犲
  • 原因:中文有两种编码,GBK 和 UTF-8,python 读取的编码与文件的编码不一致。
  • 解决:查文件的编码(记事本文件另存为),指定 python 打开文件时的编码为文件编码。

如果显示 ANSI 就是 GBK 编码。

python 复制代码
代码:
with open("file.txt", 'r', encoding='utf-8') as f:
    print(f.read(2))

结果:
你好

四、其他文件操作

  • 实时将缓存数据写入到文件:file.flush()。缓存什么时候自动写入文件:缓存满、文件 close。缓存没满的时候想实时写入就可以用 flush。(非必须不建议用,会有性能损耗)
  • 获取当前文件游标位置(跳过的字节数):file.tell()
  • 设置文件当前位置:file.seek(跳过的字节数,相对起始位置) 。起始位置3种:0开头、1当前、2结尾。
  • 截取指定字符数内容,后面内容全部删除:file.truncate()。参数可填截取的字节数,默认为0。
python 复制代码
代码:
with open("file.txt", 'r+', encoding='utf-8') as f:  # 需要可读可写操作
    f.truncate(3)  # 写操作
    print(f.readlines())  # 读操作

结果:
['123']
相关推荐
用户9562562542926 分钟前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
威哥爱编程1 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程1 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_967980111 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读1 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
新*2 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
David猪大卫3 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
卷无止境4 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python
fengci.4 小时前
CTF2MISC中等部分
开发语言·前端·学习
锋行天下5 小时前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python