Python 基础 (六)Python的文件模块

目录

  • Python基础文章系列
    • 4.6 文件
      • 4.6.1 输出
      • 4.6.2 键盘读取
      • 4.6.3 File对象
        • open() 方法
        • f.read()
        • f.write()
        • f.readline()
        • f.readlines()
        • f.tell()
        • f.seek()
        • 总结
      • 4.6.4 Os模块

Python基础文章系列

Python 基础 (一)Python基本认识与环境搭建 Python 基础 (一)Python基本认识与环境搭建
Python 基础 (二)Python变量与基本数据类型 Python 基础 (二)Python变量与基本数据类型
Python 基础 (三)Python基本语句与基本运算 Python 基础 (三)Python基本语句与基本运算
Python 基础 (四)Python函数 Python 基础 (四)Python函数
Python 基础 (五)Python包与模块 Python 基础 (五)Python包与模块
Python 基础 (六)Python的文件模块 Python 基础 (六)Python的文件模块
Python 基础 (七)Python的异常处理机制 Python 基础 (七)Python的异常处理机制
Python 基础 (八)Python的类与对象 Python 基础 (八)Python的类与对象
Python 基础 (九)Python的内置模块 Python 基础 (九)Python的内置模块
Python 基础 (十)Python实现简单的图书管理系统 Python 基础 (十)Python实现简单的图书管理系统

Python 基础 (六)Python的文件模块_第1张图片

4.6 文件

4.6.1 输出

在Python中,您可以使用不同的方法来格式化和输出文本和数据。以下是一些常用的方法和技巧:

  1. 使用**print**函数print函数是最常用的输出文本和数据的方式。您可以将字符串、变量和表达式传递给print函数,并它们将被打印到标准输出(通常是终端)。
name = "Alice"
age = 30
print("Name:", name, "Age:", age)
  1. 格式化字符串:Python提供了多种字符串格式化方式。一种常见的方式是使用f-strings(在Python 3.6及更高版本中可用):
name = "Alice"
age = 30
print(f"Name: {name}, Age: {age}")

您还可以使用str.format()方法或百分号格式化符号%

  1. 对齐文本:您可以使用字符串的str.ljust()str.rjust()str.center()方法来对齐文本。这些方法可以用于创建美观的输出。
text = "Python"
print(text.ljust(10))  # 左对齐
print(text.rjust(10))  # 右对齐
print(text.center(10))  # 居中对齐
  1. 数字格式化:如果要格式化数字,可以使用字符串的format方法或f-strings。例如,控制浮点数的小数点位数:
num = 3.14159265359
formatted_num = "{:.2f}".format(num)
print(formatted_num)  # 输出 "3.14"
  1. 多行文本:如果要输出多行文本,可以使用三重引号('''""")创建多行字符串:
multi_line_text = """
This is a
multi-line
text.
"""
print(multi_line_text)
  1. 转义字符:要在文本中包含特殊字符,可以使用转义字符,如\n表示换行,\t表示制表符。
print("Hello\nWorld")
  1. 文件输出:除了在终端上输出,您还可以将文本写入文件。使用open()函数打开文件,并使用文件对象的write()方法写入内容。
with open("output.txt", "w") as file:
    file.write("Hello, file!")

4.6.2 键盘读取

在Python中,您可以使用内置的input()函数来从键盘读取用户输入。input()函数会等待用户输入一行文本,然后返回用户输入的内容作为字符串。
以下是使用input()函数的基本示例:

user_input = input("请输入您的名字:")
print("您输入的名字是:", user_input)

在这个示例中,input("请输入您的名字:")会显示一个提示信息(在这里是"请输入您的名字:"),然后等待用户输入。用户输入的内容会被存储在变量user_input中,然后用print函数进行输出。
需要注意的是,input()函数返回的始终是字符串,即使用户输入的是数字或其他类型的数据。如果需要将输入转换为其他类型,您可以使用适当的类型转换函数,例如int()float()

user_age = input("请输入您的年龄:")
user_age = int(user_age)  # 将输入的字符串转换为整数
print("您的年龄是:", user_age)

请注意,input()函数会一直等待用户输入,直到用户按下Enter键。如果需要终止等待,可以通过编写适当的代码来实现,例如按下特定的键或达到某个条件。
另外,对于实际应用中的用户输入,务必要考虑错误处理和异常处理,以确保程序在用户输入不符合预期时能够正确处理。

4.6.3 File对象

open() 将会返回一个 file 对象,基本语法格式如下:

open() 方法

Python open() 方法用于打开一个文件,并返回文件对象。
在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError
**注意:**使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode=‘r’)
完整的语法格式为:

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

参数说明:

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。

不同模式打开文件的完全列表:

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

下图很好的总结了这几种模式:
Python 基础 (六)Python的文件模块_第2张图片

f.read()

为了读取一个文件的内容,调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象返回。
size 是一个可选的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且返回。

# ---encoding:utf-8---
# @Time    : 2023/9/2 17:58
# @Author  : Darwin_Bossen
# @Email   :[email protected]
# @Site    : 打开文件
# @File    : OpenTest.py

if __name__ == '__main__':
   file= open("../HelloWord.py", "r")
   # 读取文件
   print(file.read())
   # 关闭
   file.close()

Python 基础 (六)Python的文件模块_第3张图片

f.write()

f.write(string) 将 string 写入到文件中, 然后返回写入的字符数

# ---encoding:utf-8---
# @Time    : 2023/9/2 18:04
# @Author  : Darwin_Bossen
# @Email   :[email protected]
# @Site    : 写入文件
# @File    : Write.py

if __name__ == '__main__':
    # 打开一个文件
    f = open("foo.txt", "w")
    num = f.write("Python 是一个非常好的语言。\n是的,的确非常好!!\n")
    print(num)
    # 关闭打开的文件
    f.close()

f.readline()

f.readline() 会从文件中读取单独的一行。换行符为 ‘\n’。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。

# ---encoding:utf-8---
# @Time    : 2023/9/2 18:06
# @Author  : Darwin_Bossen
# @Email   :[email protected]
# @Site    : 读取某一行
# @File    : ReadLine.py

if __name__ == '__main__':
    file= open("../HelloWord.py", "r")
    # 读取文件
    print(file.readline())
    # 关闭
    file.close()

f.readlines()

f.readlines() 将返回该文件中包含的所有行。
如果设置可选参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。

# ---encoding:utf-8---
# @Time    : 2023/9/2 18:08
# @Author  : Darwin_Bossen
# @Email   :[email protected]
# @Site    : 读取所有行
# @File    : Readlines.py

if __name__ == '__main__':
    file= open("../HelloWord.py", "r")
    # 读取文件
    print(file.readlines())
    # 关闭
    file.close()

f.tell()

f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。

# ---encoding:utf-8---
# @Time    : 2023/9/2 18:10
# @Author  : Darwin_Bossen
# @Email   :[email protected]
# @Site    :  返回文件的当前位置
# @File    : Tell.py

if __name__ == '__main__':
    file= open("../HelloWord.py", "r")
    # 读取文件
    print(file.tell())
    # 关闭
    file.close()

f.seek()

如果要改变文件指针当前的位置, 可以使用 f.seek(offset, from_what) 函数。
from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾,例如:

  • seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
  • seek(x,1) : 表示从当前位置往后移动x个字符
  • seek(-x,2):表示从文件的结尾往前移动x个字符
# ---encoding:utf-8---
# @Time    : 2023/9/2 18:12
# @Author  : Darwin_Bossen
# @Email   :[email protected]
# @Site    :  移动文件的读取指针到指定位置
# @File    : Seek.py

if __name__ == '__main__':
    file= open("../HelloWord.py", "r")
    # 读取文件
    print(file.seek(3))
    # 关闭
    file.close()

总结

open()方法是Python用于打开文件的内置函数。它允许您指定文件名、文件模式以及其他可选参数,以便在程序中访问和操作文件。以下是open()方法的常见用法和参数:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  • file:要打开的文件名(包括文件路径)。可以是相对路径或绝对路径。
  • mode(可选):文件打开模式,默认为 'r'(只读文本模式)。常见的模式包括:
    • 'r':只读模式(文本文件)。
    • 'w':写入模式,如果文件不存在则创建,如果存在则截断文件。
    • 'a':追加模式,如果文件不存在则创建,如果存在则在文件末尾追加。
    • 'b':二进制模式,与上述模式结合使用,如 'rb''wb''ab'
  • buffering(可选):缓冲策略。通常为 -1,表示使用默认缓冲,或者可以设置为其他整数,表示缓冲区大小。
  • encoding(可选):指定文件的编码方式,通常用于文本文件。例如 'utf-8'
  • errors(可选):处理编码错误的策略,通常为 'strict'(抛出异常)、'ignore'(忽略错误)等。
  • newline(可选):用于处理换行符的方式,通常为 None(根据平台自动选择)或 ''(不转换换行符)。
  • closefd(可选):如果为 True,则会在关闭文件时关闭底层文件描述符。
  • opener(可选):自定义文件打开器,通常用于创建自定义文件类的实例。

示例用法:

# 打开一个文本文件以供读取
with open("example.txt", "r") as file:
    content = file.read()
    print(content)

# 打开一个文本文件以供写入
with open("output.txt", "w") as file:
    file.write("Hello, file!")

# 打开一个二进制文件以供读取
with open("binary_data.bin", "rb") as file:
    data = file.read()

# 自定义编码和错误处理方式
with open("data.txt", "r", encoding="utf-8", errors="ignore") as file:
    content = file.read()

请注意,在使用open()打开文件后,应该使用with语句来确保文件在退出代码块后正确关闭。这有助于避免资源泄漏和确保文件操作的正确性。
Python中的文件对象是通过open()函数创建的,它用于与文件进行交互,包括读取和写入文件内容。以下是文件对象的一些常用方法:

  1. **read(size=-1)**:从文件中读取指定大小的数据,如果未提供size参数或size为负数,则会读取整个文件内容。
with open("example.txt", "r") as file:
    data = file.read()
  1. **readline(size=-1)**:读取文件的一行文本,如果提供size参数,则最多读取指定大小的字符。
with open("example.txt", "r") as file:
    line = file.readline()
  1. **readlines(hint=-1)**:读取文件的多行文本,返回一个包含行的列表。如果提供hint参数,则最多读取指定数量的字符。
with open("example.txt", "r") as file:
    lines = file.readlines()
  1. **write(string)**:将字符串写入文件。如果文件以写入模式打开,则会覆盖文件内容;如果文件不存在,则创建一个新文件。
with open("output.txt", "w") as file:
    file.write("Hello, file!")
  1. **writelines(lines)**:将一个包含字符串的列表写入文件,不会自动添加换行符。
lines = ["Line 1\n", "Line 2\n", "Line 3\n"]
with open("output.txt", "w") as file:
    file.writelines(lines)
  1. **seek(offset, whence=0)**:移动文件指针到指定位置。offset表示偏移量,whence表示相对位置,默认为0(文件开头)。可以使用常量os.SEEK_SET(开头)、os.SEEK_CUR(当前位置)、os.SEEK_END(文件末尾)来设置whence
with open("example.txt", "r") as file:
    file.seek(10)  # 移动到文件的第11个字符位置
  1. **tell()**:返回文件指针的当前位置。
with open("example.txt", "r") as file:
    position = file.tell()
  1. **flush()**:刷新文件缓冲区,将缓冲区中的数据写入文件。
with open("output.txt", "w") as file:
    file.write("Hello, file!")
    file.flush()
  1. **close()**:关闭文件。使用with语句可以自动关闭文件,但在某些情况下,您可能需要显式调用close()方法。

4.6.4 Os模块

os模块是Python标准库中的一个重要模块,它提供了与操作系统交互的功能,包括文件和目录操作、进程管理、环境变量等。以下是一些os模块中常用的函数和方法:

# ---encoding:utf-8---
# @Time    : 2023/9/2 18:32
# @Author  : Darwin_Bossen
# @Email   :[email protected]
# @Site    : 
# @File    : Os.py
import os


if __name__ == '__main__':
    # 指定目录名称
    new_directory = "my_directory"

    # 创建新目录
    os.mkdir(new_directory)

    # 获取当前工作目录
    current_directory = os.getcwd()

    # 在新目录下创建文件
    file1_path = os.path.join(new_directory, "file1.txt")
    file2_path = os.path.join(new_directory, "file2.txt")

    with open(file1_path, "w") as file1:
        file1.write("This is file 1.")

    with open(file2_path, "w") as file2:
        file2.write("This is file 2.")

    # 列出新目录中的文件
    files_in_directory = os.listdir(new_directory)

    # 打印新目录中的文件列表
    print(f"Files in {new_directory}:")
    for filename in files_in_directory:
        print(filename)

    # 获取新目录的绝对路径
    new_directory_path = os.path.abspath(new_directory)
    print(f"Absolute path of {new_directory}: {new_directory_path}")

    # 删除新目录及其内容
    os.rmdir(new_directory)

    # 检查新目录是否存在
    if not os.path.exists(new_directory):
        print(f"{new_directory} has been deleted.")
    else:
        print(f"{new_directory} still exists.")

  1. 文件和目录操作
    • os.getcwd():获取当前工作目录的路径。
    • os.chdir(path):更改当前工作目录为指定路径。
    • os.listdir(path='.'):列出指定目录中的所有文件和子目录。
    • os.mkdir(path):创建一个新目录。
    • os.makedirs(path):递归地创建多级目录。
    • os.remove(path):删除文件。
    • os.rmdir(path):删除目录(只能删除空目录)。
    • os.removedirs(path):递归地删除多级目录。
    • os.rename(src, dst):重命名文件或目录。
  2. 路径操作
    • os.path.join(path1, path2, ...):连接路径中的各个部分。
    • os.path.abspath(path):返回绝对路径。
    • os.path.dirname(path):返回路径中的目录部分。
    • os.path.basename(path):返回路径中的文件名部分。
    • os.path.exists(path):检查路径是否存在。
    • os.path.isfile(path):检查路径是否为文件。
    • os.path.isdir(path):检查路径是否为目录。
  3. 环境变量
    • os.environ:包含系统环境变量的字典。
    • os.getenv(key, default=None):获取指定环境变量的值。
  4. 执行系统命令
    • os.system(command):执行系统命令。
  5. 进程管理
    • os.getpid():获取当前进程的PID。
    • os.getppid():获取父进程的PID。
  6. 文件权限
    • os.chmod(path, mode):修改文件权限。
    • os.access(path, mode):检查对文件的访问权限。
  7. 文件信息
    • os.stat(path):获取文件的状态信息,包括文件大小、创建时间等。
  8. 路径拆分
    • os.path.split(path):拆分路径为目录和文件名。
    • os.path.splitext(path):拆分路径为文件名和扩展名。
  9. 递归遍历目录
    • os.walk(top, topdown=True, onerror=None, followlinks=False):递归遍历目录,返回目录路径、子目录列表和文件列表。

os模块提供了丰富的功能,可以帮助您管理文件系统、操作系统环境和进程。它是编写跨平台的Python程序时的重要工具之一,因为它允许您与底层操作系统交互,执行各种文件和系统操作。

你可能感兴趣的:(Python,python,开发语言,前端,学习,算法)