Python文件操作很简单

发布时间:2023年12月29日

Python 文件处理

文件处理是任何 应用程序的重要组成部分。

Python提供了强大而丰富的文件处理功能,使您能够读取、写入和操作文件。以下是Python文件处理的一些主要方面:

**主要函数: **

函数名作用
open(file, mode)打开文件并返回文件对象。
close()关闭文件
read(size)从文件中读取指定大小的数据
readline()逐行读取文件内容
readlines()将文件内容读取到一个列表中
write(string)将字符串写入文件
writelines(lines)将字符串列表写入文件
seek(offset[, whence])移动文件指针到指定位置
tell()返回当前文件指针的位置
flush()刷新文件缓冲区
os.rename(src, dst)重命名文件或目录
os.remove(path):删除文件
os.path.isfile(path)检查给定路径是否是一个文件
os.path.isdir(path)检查给定路径是否是一个目录

主要模块:

模块名作用
os提供了与操作系统相关的功能,如文件和目录操作、进程管理等
shutil提供了高级的文件操作功能,如复制文件、移动文件、删除文件等
glob用于匹配文件路径名的模式
pathlib提供了面向对象的文件系统路径操作
tempfile用于创建临时文件和目录
io提供了用于处理文件流的工具
csv用于读写CSV文件的模块
json用于读写JSON文件的模块
pickle用于序列化和反序列化Python对象的模块

除了上述提到的函数和模块,还有许多其他的第三方库和模块可用于更复杂的文件处理任务,如处理Excel文件、处理PDF文件、处理图像文件等。根据具体的需求,可以选择适合的库或模块来完成文件处理任务。

语法实例:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

file:要打开的文件名或文件路径。

mode:打开文件的模式。默认为’r’,表示以只读模式打开文件。常用的模式有:

  • 'r':只读模式。
  • 'w':写入模式,会清空文件内容。
  • 'a':追加模式,将内容写入文件末尾。
  • 'x':创建新文件并写入模式。如果文件已存在,则抛出异常。

buffering:缓冲设置,默认值为-1,表示使用系统默认的缓冲策略。

encoding:文件编码格式,用于读取或写入文件时进行字符编码或解码。常见的编码格式有'utf-8''gbk'等。

errors:指定编解码错误处理方式的字符串。默认值为None,表示使用默认错误处理方式。

newline:用于控制文本文件的换行符。如果为None(默认值),则根据平台自动选择换行符。

closefd:表示是否在文件关闭时同时关闭底层文件描述符。默认值为True,通常不需要设置为False

opener:用于自定义文件开启器的可调用对象。在大多数情况下,不需要使用。

open()函数返回一个文件对象,可以使用该对象进行文件操作,如读取文件内容、写入文件、关闭文件等。当文件操作完成后,应该调用文件对象的close()方法关闭文件,以释放系统资源。

读取文件:

file = open("file.txt", "r")
content = file.read()
print(content)
file.close()

写入文件:

file = open("file.txt", "w")
file.write("Hello, World!")
file.close()

使用上下文管理器打开文件:

with open("file.txt", "r") as file:
    content = file.read()
    print(content)
    # 文件会在with块结束后自动关闭,无需调用close()

文件删除(os模块)

如需删除文件,必须导入 OS 模块,并运行其 os.remove() 函数:

import os
if os.path.exists("demofile.txt"):
  os.remove("demofile.txt")
else:
  print("The file does not exist")


os.rmdir("myfolder") //删除整个文件夹

请注意,在进行文件操作时,应该小心处理异常情况,例如文件不存在、权限问题等。

当读取大文件的时候需要注意灵活,不然就呵呵了

1. 读取指定数量的字符:
使用read()方法读取文件时,可以指定要读取的字符数量。例如,要读取前100个字符:

with open("file.txt", "r") as file:
    content = file.read(100)  # 读取前100个字符
    print(content)

2. 逐行读取文件:
使用readline()方法可以逐行读取文件内容。可以使用循环来逐行处理文件内容:

with open("file.txt", "r") as file:
    line = file.readline()
    while line:
        print(line)
        line = file.readline()

3. 迭代读取文件:
文件对象本身是可迭代的,这意味着可以直接在for循环中使用文件对象来逐行读取文件内容:

with open("file.txt", "r") as file:
    for line in file:
        print(line)

4. 写入多行内容:
使用writelines()方法可以将字符串列表写入文件,每个字符串表示一行内容。通过这种方式,可以一次性写入多行内容:

lines = ["Line 1\n", "Line 2\n", "Line 3\n"]

with open("file.txt", "w") as file:
    file.writelines(lines)

5. 自定义换行符:
在打开文件时,可以通过newline参数来指定自定义的换行符。这在处理特定文件格式时很有用,例如在Windows上使用\r\n作为换行符:

with open("file.txt", "w", newline="\r\n") as file:
    file.write("Hello, World!\n")

6. 二进制文件处理:
除了处理文本文件外,open()函数还支持处理二进制文件。在打开文件时,可以使用"rb"模式读取二进制文件,使用"wb"模式写入二进制文件:

with open("image.jpg", "rb") as file:
    data = file.read(1024)  # 读取1024字节的二进制数据

with open("copy.jpg", "wb") as file:
    file.write(data)  # 将二进制数据写入文件

这些是一些open()函数的高级用法和参数,可以根据具体的需求选择适合的方式进行文件处理。还有许多其他的文件处理技巧和模式,根据实际情况进行学习和应用。

同时配合递归函数可以实现文件夹备份:

import os
import shutil

def backup_folder(source_folder, destination_folder):
    # 检查目标备份文件夹是否存在,如果不存在,则创建它
    if not os.path.exists(destination_folder):
        os.makedirs(destination_folder)

    # 遍历源文件夹中的每个项目(文件或子文件夹)
    for item in os.listdir(source_folder):
        source_item = os.path.join(source_folder, item)
        destination_item = os.path.join(destination_folder, item)

        if os.path.isfile(source_item):
            # 如果是文件,备份文件
            shutil.copy2(source_item, destination_item)
        elif os.path.isdir(source_item):
            # 如果是子文件夹,递归备份子文件夹
            backup_folder(source_item, destination_item)

# 源文件夹路径
source_folder = "/path/to/source_folder"
# 备份目标文件夹路径
destination_folder = "/path/to/backup_folder"

# 备份文件夹
backup_folder(source_folder, destination_folder)

请根据实际情况将示例代码中的源文件夹路径和备份目标文件夹路径替换为实际的路径。此外,确保在运行代码时具有足够的权限来读取源文件夹中的文件并在目标文件夹中创建备份文件。

点赞,关注,评论~ 谢谢!

文章来源:https://blog.csdn.net/Raymend_Lee/article/details/135294725
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。