Skip to content

open 读写文件

更多请查看文档 openio 部分

读取文件

  • filename: 被读取的文件名
  • mode: 读取模式
  • encoding: 编码
python
# 打开文件
file_handle = open("./readme.md", "r", encoding="utf-8")

# 是否可读: 返回一个布尔值
if file_handle.readable():
    # 按照字节读取内容: 返回一个字符串
    print("读取 10 个字节:", file_handle.read(10))
    print("读取所有内容:", file_handle.read())

    # 是否允许在任何位置开始读取
    if file_handle.seekable():
        # 将读取指针放到最开始的位置
        file_handle.seek(0)

    # 按行读取内容, 返回一个 字符串列表, 一行就是一个元素
    contents = file_handle.readlines(1)
    print("读取一行:", contents)

    contents = file_handle.readlines()
    print("读取所有行:", contents)


print("---" * 10)
if file_handle.seekable():
    file_handle.seek(0)

# 循环读取文件内容
i = 0
for line in file_handle:
    i+=1
    print(f"第 {i} 行的数据是:{line}")

# 关闭资源句柄
file_handle.close()

with 关键字

使用 with 关键字可以自动关闭

py
# 自动关闭资源句柄
with open("./readme.md", "r", encoding="utf-8") as f1:
    print(f1.read())

### 等同于 ###
f1 = open("./readme.md", "r", encoding="utf-8")
print(f1.read())
f1.close()

写入文件

python
# 覆盖文件内容
with open("./readme.md", "w", encoding="utf-8") as f1:
    if f1.writable():
        f1.write("---overwrite---")

# 追加文件内容
with open("./readme.md", "a", encoding="utf-8") as f2:
    if f2.writable():
        f2.write("---append---")

操作系统模块

  • os: 操作系统交互模块
  • shutil: shell交互模块

文件

创建

python
import os

# 创建单个目录类似
os.mkdir("./dir1")

# 创建多级目录
os.makedirs("./dir1/dir2")

# 创建文件并写入内容
with open("./1.txt", "w") as fd:
    fd.write("11111111111")

删除

python
import os
import shutil

# 删除文件
os.unlink("./1.txt")

# 删除目录(只能删除空的)
os.rmdir("./demo1")

# 可以删除非空的目录及其子目录
shutil.rmtree("./demo1")

复制

python
import shutil

# 复制文件
shutil.copyfile("./1.txt", "./demo1/1.txt")

# 复制目录
shutil.copytree("./demo1/", "./demo2")

移动(重命名)

python
# 移动文件/目录
os.rename("./1.txt", "./demo1/new1.txt")

# 重命名文件/目录
os.rename("./demo2", "./demo1/demo2")

文件路径

查看

python
import os

# 0. 先创建一些目录和文件
os.makedirs("./dir1/dir2")
with open("./dir1/hello.txt" , "w") as f:
    f.write("hello")

# 1.查看目录下的所有文件和目录
files = os.listdir("./dir1")
print(files) # ['dir2', 'hello.txt']

# 2.查看目录下的所有文件和目录
with os.scandir("./dir1") as it:
    for entry in it:
        if  entry.is_file():
            print("文件: %s" % entry.name)
        else:
            print("目录: %s" % entry.name)

判断

python
import os

# 文件/目录是否存在
if(os.path.exists("./1.txt") or os.path.exists("./demo1")):
    print("文件存在")

# 是否是文件
if(os.path.isfile("./1.txt")):
    print("是文件")

# 是否是目录
if(os.path.isdir("./demo1")):
    print("是目录")

# 判断路径是否是绝对路径
file_path = "./demo/hello.txt"
if(os.path.isabs(file_path)):
    print("是绝对路径")
else:
    print("不是绝对路径")

信息获取

python
import os

file_path = "./demo/hello.txt"

# 分离路径总的目录名和文件名部分
dir, file = os.path.split(file_path)
print(dir, file) # ./demo hello.txt

# 分离路径的文件名部分和扩展名部分
fpath, ext = os.path.splitext(file_path)
print(fpath, ext) # ./demo/hello .txt

# 获取目录明
print(os.path.dirname(file_path)) # ./demo

# 获取文件名
print(os.path.basename(file_path)) # hello.txt

# 获取当前脚本的工作目录
print(os.getcwd()) # /Users/secret/Desktop/python_code

系统相关

python
import os

# 执行系统命令
os.system("ls")

# 读取和设置环境变量
# os.getenv()
# os.putenv()

# 产量: 系统换行符
# window: \r\n
# linux/mac: \n
print(f"1{os.linesep}2")

Released under the MIT License.