进阶 6: 文件操作

文件的作用:进行持久化存储数据

文件操作介绍

程序操作文件过程

  • 打开->设置打开模式(读写)
  • 操作文件(读取)
  • 关闭->close()

文件的访问模式

文件的访问模式
	读取:
		文本形式
			程序文件
			.txt 文件
			.rtf 文件
		二进制形式
			音频文件
			视频文件
			图片文件

	写入:
		文本形式
			程序文件
			.txt 文件
			.rtf 文件
		二进制形式
			音频文件
			视频文件
			图片文件
以文本方式打开方式的模式
	r -> rt  -> read text 以文本方式打开文件读,文件存在,打开成功,文件不存在,打开失败
	w -> wt  -> write text 以文本方式打开文件写,不管文件是否存在,都会新创建一个新文件
	a -> at  -> append text 以文件方式打开文件追加,文件不存在,创建文件,文件存在,那么打开文件然后将光标移动到文件的最后

以二进制形式打开文件的模式
	rb  以二进制形式打开文件读取
	wb  以二进制形式打开文件写入
	ab  以二进制形式打开文件追加

既想要读取,又想要写入(了解)
	r+  这三种模式都具有读取写入功能
	w+
	a+

文件操作

打开文件

# 'r' 是只读模式,默认模式
file = open('example.txt', 'r')

# 'w' 是写入模式,会覆盖文件
file = open('example.txt', 'w')

# 'a' 是追加模式,内容将被添加到文件末尾
file = open('example.txt', 'a')

# 'b' 是二进制模式
file = open('example.jpg', 'rb')

读取文件的方式

# 一次性读取整个文件,不适合大文件读取
with open('example.txt', 'r') as file:
    content = file.read() 
    print(content)

# 如果文件比较大,不建议上面这样读取,建议读取指定字节数的文件内容读取一部分,先读4K:content = file.read(4096)
# 读取多行文件的方式read(size)
with open('example.txt', 'r') as file:
while True:
    # 读取
    content = file.read(4096)
    # 如果在文件读取时,读取的结果为 空串,说明文件读取完毕
    # 根据这个条件 可以设置读取文件的结束条件
    if content == '':
        break
    print(content,end='')


# 读取文件的每一行并存入一个列表,每一行都是一个列表元素
with open('example.txt', 'r') as file:
    lines = file.readlines()
    print(lines)

# 逐行读取文件
with open('example.txt', 'r') as file:
    for line in file:
        print(line.strip())

写入文件

# 写入文件(会覆盖文件内容)
with open('example.txt', 'w') as file:
    file.write('Hello, World!\n')

# 追加到文件末尾
with open('example.txt', 'a') as file:
    file.write('This is an additional line.\n')

关闭文件

尽管使用 with open() 可以自动处理文件的关闭,但如果手动打开文件,则需要手动关闭:

file = open('example.txt', 'r')
content = file.read()
file.close()

常用文件和文件夹操作

Python OS 模块

Python 的 os 模块是标准库的一部分,为操作系统相关的功能提供了便捷的接口。它允许你执行与操作系统交互的各种操作,比如文件和目录的管理、环境变量的访问等等。以下是 os 模块的一些常见功能和使用示例:

  1. 路径管理:
    • os.path.join(): 用于拼接路径。
    • os.path.exists(): 检查路径是否存在。
    • os.path.abspath(): 得到绝对路径。
    • os.path.dirname(): 获取路径的目录部分。
    • os.path.basename(): 获取路径的最后一部分。
   import os

   path = os.path.join("folder", "file.txt")
   print(path)  # folder/file.txt on Unix系 or folder\file.txt on Windows
  1. 文件和目录操作:
    • os.listdir(): 列出指定目录中的所有文件和目录。
    • os.mkdir(): 创建新目录。
    • os.makedirs(): 递归创建目录。
    • os.remove(): 删除文件。
    • os.rmdir(): 删除目录。
    • os.rename():重命名文件
   os.mkdir('new_folder')        # 创建一个新目录
   files = os.listdir('.')      # 列出当前目录的内容
  1. 环境变量:
    • os.getenv(): 获取环境变量的值。
    • os.environ: 一个表示环境变量的字典。
   path_var = os.getenv('PATH')
   print(path_var)
  1. 执行系统命令:
    • os.system(): 执行系统命令。
    • os.popen(): 打开一个管道,用于执行命令并获取输出。
   os.system('echo "Hello, World!"')
  1. 获取文件属性:
    • os.stat(): 获取文件的信息,比如大小和修改时间。
    • os.path.getsize(): 获取文件大小。
    • os.path.getmtime(): 获取文件的最后修改时间。
   file_info = os.stat('file.txt')
   print(file_info.st_size)  # 打印文件大小
  1. 改变和获取当前工作目录:
    • os.getcwd(): 获取当前工作目录。
    • os.chdir(): 改变当前工作目录。
   current_dir = os.getcwd()
   os.chdir('/path/to/directory')
  1. 创建临时文件和目录:
    使用tempfile模块通常更为合适,但os也提供一些基础功能去创建临时文件。
  2. 权限和时间戳管理:
    • os.chmod(): 改变文件权限。
    • os.utime(): 更新访问和修改时间。

文件练习

复制一个文件

'''
实现了一个复制命令
'''
import sys

def file_copy(src, dst):
    # 以读取的方式 打开源文件
    file_r = open(src, 'rb')
    # 以写的方式打开目标文件
    file_w = open(dst, 'wb')
    # 循环
    while True:
        # 读取文件内容
        content = file_r.read(1024)
        # 将读取的文件内容 写入到另一个文件中
        if content == b'':
            print('文件拷贝成功')
            break
        # 写入文件
        file_w.write(content)

    # 关闭文件
    file_r.close()
    file_w.close()

print(sys.argv)
src=sys.argv[1]
dst=sys.argv[2]

file_copy(src,dst)
进阶 6: 文件操作

当然,上述代码会有一些功能尚未全面:下面这个代码涉及到以后的知识,先简单看下即可

  1. 需要确保目标目录存在,否则会出现错误。
  2. 没有考虑异常处理,如读取或写入文件时可能发生的异常
import os
import sys

def file_copy(src, dst):
    # 确保目标目录存在
    os.makedirs(os.path.dirname(dst), exist_ok=True)
    
    # 打开文件
    with open(src, 'rb') as file_r, open(dst, 'wb') as file_w:
        while True:
            content = file_r.read(4096)
            if not content:
                print("文件拷贝成功")
                break
            # 写入文件
            file_w.write(content)

if __name__ == "__main__":
    # 检查命令行参数的数量
    if len(sys.argv) < 3:
        print("用法: python script.py <源文件> <目标文件>")
        sys.exit(1)
    
    src = sys.argv[1]
    dst = sys.argv[2]
    
    # 检查源文件是否存在
    if not os.path.isfile(src):
        print(f"错误: 源文件不存在: {src}")
        sys.exit(1)
        
    file_copy(src, dst)

批量修改文件名,后复制

发布者:LJH,转发请注明出处:https://www.ljh.cool/41834.html

(0)
上一篇 2024年11月11日 下午5:06
下一篇 2024年11月14日 下午4:30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注