Python 学习笔记(十)—— 文件

发布于:2024-04-18 ⋅ 阅读:(147) ⋅ 点赞:(0)

目录

一、文件基本概念

二、文件打开和关闭

2.1 打开文件 open() 方法

2.2 File 对象的属性

2.3 关闭文件 close() 方法

三、文件操作

3.1 写入操作方法

3.1.1 write() 方法

3.3.2 writelines() 方法

3.2 读取操作方法

3.2.1 read() 方法

3.2.2 readline() 方法

3.2.3 readlines() 方法

3.3 定位与移动操作方法

3.3.1 tell() 方法

3.3.2 seek() 方法

3.4 复制、重命名与删除

3.4.1 文件复制

3.4.2 文件重命名

3.4.3 文件删除

3.4.4 删除目录

四、文件夹操作

4.1 创建文件夹

4.2 删除文件夹

4.3 重命名文件夹

4.4 检查文件夹是否存在

4.5 切换当前工作目录

4.6 获取当前工作目录


一、文件基本概念

文件是计算机系统中存储信息的基本单位。它可以包含文本、图片、音频、视频等各种形式的数据。文件通常被存储在存储设备(如硬盘、闪存、光盘等)上,可以被计算机系统读取、写入和处理。

文件通常有一个唯一的文件名,用于标识不同的文件。文件名一般包含文件的扩展名,用于表示文件的类型或格式。例如:.txt表示文本文件,.jpg表示图片文件,.mp3表示音频文件等。

文件可以通过文件路径来定位和访问。文件路径通常包含文件的位置信息,可以是相对路径(相对于当前工作目录)或绝对路径(从根目录开始的完整路径)。通过文件路径,用户可以找到指定文件并操作它。

文件的内容可以被读取、写入和修改。读取文件可以获取文件中存储的数据,并将其加载到计算机内存中。写入文件可以将数据存储到文件中,并更新文件的内容。修改文件可以改变文件的内容、大小或属性。

文件可以分为不同的类型,常见的类型包括文本文件、二进制文件、可执行文件、压缩文件等。不同类型的文件有不同的结构和格式,需要使用不同的方法来处理和操作。

二、文件打开和关闭

2.1 打开文件 open() 方法

open()方法是Python内置的文件打开函数,用于打开一个文件并返回文件对象。

函数原型:

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

参数说明:

  • file:要打开的文件名或路径。
  • mode:打开文件的模式。
  • buffering:设置缓冲策略,默认值为-1,表示使用系统默认的缓冲策略。
  • encoding:指定打开文件时的编码方式,常用的编码方式有'utf-8'、'gbk'等。
  • errors:设置编码错误处理方式,默认值为None,表示忽略错误。
  • newline:设置换行符的处理方式,默认值为None,表示使用系统默认的换行符。
  • closefd:指定关闭文件描述符的方式,默认值为True,表示关闭文件描述符。
  • opener:设置打开文件时使用的自定义开启器。

常见的文件打开模式:

模式 描述
'r' 以只读方式打开文件。文件指针位于文件的开头,如果文件不存在则抛出异常。
'w' 以写入方式打开文件。如果文件存在则将其内容清空,如果文件不存在则创建一个新文件。
'a' 以追加方式打开文件。文件指针位于文件的末尾,如果文件不存在则创建一个新文件。
'x' 以独占方式创建一个新文件并打开文件。如果文件已经存在则抛出异常。
'b' 以二进制模式打开文件。可以与其他模式一起使用,如 'rb'、'wb'、'ab'。
't' 以文本模式打开文件。默认模式,可以与其他模式一起使用,如 'rt'、'wt'、'at'。
'+' 以读写方式打开文件。可以与其他模式一起使用,如 'r+'、'w+'、'a+'。

2.2 File 对象的属性

在 Python 中,通过使用 open() 函数打开文件后,会返回一个文件对象。可以使用该对象的属性来获取有关文件的相关信息。以下是一些常见的文件对象属性:

  • name:返回文件的名称或路径。
  • mode:返回文件的打开模式。
  • closed:表示文件是否已关闭,如果文件已关闭则为 True,否则为 False
  • encoding:返回文件的编码方式。
  • readable():返回文件是否可读。
  • writable():返回文件是否可写。
  • seekable():返回文件是否支持随机访问。

例如:

f = open('file.txt', 'r')
print(f.name)        # 输出文件名 'file.txt'
print(f.mode)        # 输出文件的打开模式 'r'
print(f.closed)      # 输出文件是否已关闭 False
print(f.encoding)    # 输出文件的编码方式
print(f.readable())  # 输出文件是否可读 True
print(f.writable())  # 输出文件是否可写 False
print(f.seekable())  # 输出文件是否支持随机访问 True

f.close()            # 关闭文件
print(f.closed)      # 输出文件是否已关闭 True

注意:

在使用这些属性之前,确保文件对象是有效的并且已打开。如果文件已关闭,则无法访问文件对象的属性。

2.3 关闭文件 close() 方法

在Python中,我们可以使用文件对象的 close() 方法来关闭已打开的文件。调用 close() 方法后,文件将不再可用,并且资源将被释放。

以下是使用 close() 方法关闭文件的示例:

f = open("file.txt", "r")
# 使用文件对象进行操作
f.close()

注意:

关闭文件是一个很好的习惯,可以确保文件资源被正确释放。在没有显示调用 close() 方法时,Python也会在程序结束时自动关闭文件。

此外,还有另一种更常用的方式来打开文件,并使用 with 语句来自动关闭文件。下面是使用 with 语句来关闭文件的示例:

with open("file.txt", "r") as f:
    # 使用文件对象进行操作
    # 在结束 with 代码块后,文件会自动关闭

在上面的示例中,我们使用 with 语句打开文件,并将返回的文件对象赋给变量 f。然后我们使用文件对象进行文件操作。当 with 代码块结束时,文件对象会自动关闭,无需显式调用 close() 方法。

三、文件操作

3.1 写入操作方法

3.1.1 write() 方法

在Python中,我们可以使用文件对象的 write() 方法向文件中写入内容。write() 方法接受一个字符串作为参数,并将该字符串写入文件。

以下是使用 write() 方法写入文件的示例:

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

在上面的示例中,我们使用 open() 函数以写入模式打开文件,并将返回的文件对象赋给变量 f。然后,我们使用 f.write("He llo, World!") 将字符串 "Hello, World!" 写入文件。最后,我们调用 f.close() 方法来关闭文件。

3.3.2 writelines() 方法

除了使用 write() 方法写入字符串,我们还可以使用 writelines() 方法将多个字符串写入文件writelines() 方法接受一个字符串列表作为参数,将列表中的所有字符串写入文件。

以下是使用 writelines() 方法写入文件的示例:

f = open("file.txt", "w")
lines = ["Hello, ", "World!"]
f.writelines(lines)
f.close()

在上面的示例中,我们使用 writelines() 方法将字符串列表 lines 写入文件。

除了普通文本,我们还可以写入其他数据类型,如数字、列表或者字典。但是,在写入非字符串类型时,需要先将其转换为字符串格式。

以下是将数字写入文件的示例:

f = open("file.txt", "w")
f.write(str(10))
f.close()

在上面的示例中,我们在写入之前使用 str() 函数将数字 10 转换为字符串。然后,我们通过 write() 方法将字符串 "10" 写入文件。

3.2 读取操作方法

文件读取操作方法有以下几种常见的方式:

3.2.1 read() 方法

read()方法:一次性读取整个文件的内容。

with open('file.txt', 'r') as file:
    content = file.read()

3.2.2 readline() 方法

readline()方法:逐行读取文件内容。每次调用readline()方法读取一行,并将光标移动到下一行。

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

3.2.3 readlines() 方法

readlines()方法:读取多行内容并以列表形式返回,每一行作为列表的一个元素。

with open('file.txt', 'r') as file:
    lines = file.readlines()
    for line in lines:
        print(line)

3.3 定位与移动操作方法

在文件读取过程中,有时需要定位到文件的特定位置或移动文件指针到不同的位置。Python提供了一些方法来进行文件定位移动操作。

以下是文件定位与移动操作方法:

3.3.1 tell() 方法

tell()方法:tell()方法返回文件指针的当前位置,即文件中当前读取/写入的位置。

with open('file.txt', 'r') as file:
    position = file.tell()
    print(position)

3.3.2 seek() 方法

seek()方法:seek()方法用于将文件指针移动到指定位置。它接受两个参数:偏移量和起始位置。

函数原型:

seek(offset, whence)

参数说明:

  • offset:偏移量,表示需要移动的字节数。可以是正数、负数或零。正数表示向后移动,负数表示向前移动,零表示不移动。
  • whence:起始位置,表示确定偏移量的参考位置。可以是0、1或2。
    • 0:从文件开头开始计算偏移量。
    • 1:从当前位置开始计算偏移量。
    • 2:从文件末尾开始计算偏移量。

  • seek()方法在文件开头位置移动文件指针:
with open('file.txt', 'r') as file:
    file.seek(10)  # 将文件指针移动到第10个字节处
    content = file.read()
    print(content)

  • seek()方法在当前位置移动文件指针:
with open('file.txt', 'r') as file:
    file.seek(5, 1)  # 从当前位置向后移动5个字节
    content = file.read()
    print(content)

注意:

在使用seek()方法之前,要确保文件以读取模式打开。此外,使用tell()和seek()方法时,要确保文件指针不超出文件的大小范围,否则可能会引发异常。

3.4 复制、重命名与删除

在python中,可以使用shutil模块os模块来进行文件复制、重命名和删除操作。

3.4.1 文件复制

使用shutil模块中的copy()函数进行文件复制操作。示例如下:

import shutil

# 复制单个文件
shutil.copy('source_file.txt', 'destination_file.txt')

# 复制整个目录
shutil.copytree('source_directory', 'destination_directory')

3.4.2 文件重命名

使用os模块中的rename()函数进行文件重命名操作。示例如下:

import os

os.rename('old_file_name.txt', 'new_file_name.txt')

3.4.3 文件删除

使用os模块中的remove()函数进行文件删除操作。示例如下:

import os

os.remove('file_to_be_deleted.txt')

3.4.4 删除目录

需要使用shutil模块中的rmtree()函数。示例如下:

import shutil

shutil.rmtree('directory_to_be_deleted')

四、文件夹操作

在Python中,使用os模块可以进行文件夹的操作。下面是一些常见的文件夹操作方法:

4.1 创建文件夹

os.mkdir(path),其中path为要创建的文件夹路径。

import os
os.mkdir("folder_name")

4.2 删除文件夹

os.rmdir(path),其中path为要删除的文件夹路径。

import os
os.rmdir("folder_name")

4.3 重命名文件夹

os.rename(src, dst),其中src为原文件夹路径,dst为目标文件夹路径。

import os
os.rename("old_folder_name", "new_folder_name")

4.4 检查文件夹是否存在

os.path.exists(path),其中path为文件夹路径。返回值为布尔型,存在返回True,不存在返回False

import os
if os.path.exists("folder_name"):
    print("文件夹存在")
else:
    print("文件夹不存在")

4.5 切换当前工作目录

os.chdir(path),其中path为目标文件夹路径。

import os
os.chdir("folder_name")

4.6 获取当前工作目录

os.getcwd(),返回当前工作目录的路径。

import os
current_dir = os.getcwd()
print(current_dir)