python文件操作

文件概述

在程序运行时,数据通常被加载到内存中以便快速处理。然而,内存中的数据在断电后会丢失,无法永久保存。为了永久存储数据,我们需要将数据保存到文件或数据库中。因此,掌握文件处理对于编程至关重要。

文件是数据的集合,可以存储多种类型的数据,包括文字、图片、音乐、视频等。

文本文件

文本文件由若干字符构成,可以使用文本编辑器进行阅读或编辑。常见的文本文件后缀包括 .txt、.c、.py 等。

二进制文件

二进制文件无法直接使用文本编辑器打开阅读或编辑,需要通过特定的软件才能打开或修改。常见的二进制文件后缀包括 mp3、mp4、png 等。从本质上讲,文本文件也是二进制文件的一种表现形式,因为计算机处理的所有数据都是以二进制形式存储的。

文件操作

文件操作主要包括三个步骤:打开文件、读或写数据、关闭文件。

打开文件

使用 open() 函数打开文件,其语法格式如下:

python复制代码



open(file[, mode = 'r' [,...] ])
  • file:被打开的文件名。
  • mode:文件的打开模式,默认为只读模式 'r'。

常用的文件打开模式包括:

  • 'r':只读模式,如果文件不存在,则会产生异常。
  • 'r+':读写模式,如果文件不存在,则会产生异常。
  • 'w':写入模式,如果文件已存在,则删除原内容;如果文件不存在,则新建文件。
  • 'w+':读写模式,功能与 'w' 相同,但允许读取。
  • 'a':追加模式,如果文件已存在,则在文件末尾追加内容;如果文件不存在,则新建文件。
  • 'a+':读写追加模式,功能与 'a' 相同,但允许读取。
  • 'rb+'、'wb+'、'ab+':分别对应二进制文件的读写、读写新建、读写追加模式。

示例代码:

python复制代码



f1 = open('test.txt', mode="r", encoding="utf-8")  # 打开当前目录下的test.txt文件  
f2 = open('../test.txt')  # 打开上级目录下的test.txt文件  
f3 = open('D:/python/test.txt')  # 打开D:/python目录下的test.txt文件

读取和写入数据

打开文件后,可以通过文件对象进行读取和写入操作。具体方法取决于文件的打开模式。

  • 读取文件内容通常使用 read()、readline() 或 readlines() 方法。
  • 写入文件内容则使用 write() 方法。

关闭文件

操作完成后,应使用 close() 方法关闭文件,以确保所有修改都被保存并释放系统资源。然而,如果在打开文件后和关闭文件前发生错误,程序可能会崩溃,导致文件无法正常关闭。为了避免这种情况,推荐使用 with 关键字来管理文件的打开和关闭。

python复制代码



with open('test.txt', 'rw') as f1:  
    # 在这里进行文件操作  
    # 文件会在with语句块结束时自动关闭

with 语句还可以同时打开多个文件进行操作。

总结

文件操作是编程中不可或缺的一部分,掌握文件打开、读取、写入和关闭的基本方法对于处理数据至关重要。通过合理使用 open() 函数和 with 语句,可以高效地进行文件操作,并确保数据的正确性和安全性。

5. 文件的基本操作
5.1 打开文件

使用open()函数可以打开文件,该函数的基本语法如下:

file_object = open(file_name, mode='r', encoding='utf-8')
  • file_name:要打开的文件名。
  • mode:文件的打开模式,默认为'r'(只读模式)。常用的模式包括'r'(只读)、'w'(写入,文件不存在则创建,存在则覆盖)、'a'(追加,文件不存在则创建)、'b'(二进制模式,可与其他模式组合使用,如'rb'、'wb')。
  • encoding:指定文件的编码方式,默认为'utf-8'。
示例
# 打开当前目录下的test.txt文件,以只读模式  
f1 = open('test.txt', 'r', encoding='utf-8')  
  
# 打开上级目录下的test.txt文件,默认模式为只读  
f2 = open('../test.txt')  
  
# 打开指定路径下的文件  
f3 = open('D:/python/test.txt', 'r', encoding='utf-8')
6. 文件的读取
6.1 read()方法

read()方法用于读取文件内容。可以指定读取的字节数或字符数,如果不指定,则读取整个文件。

file_content = file_object.read([size])
  • size(可选):指定读取的字节数或字符数。
示例
with open('test.txt', 'r', encoding='utf-8') as f:  
    content = f.read()  
    print(content)
6.2 readline()方法

readline()方法用于逐行读取文件内容。

line = file_object.readline()
  • 读取一行内容,直到遇到换行符或文件末尾。
示例
with open('test.txt', 'r', encoding='utf-8') as f:  
    while True:  
        line = f.readline()  
        if not line:  
            break  
        print(line, end='')  # 保留换行符则不需要end=''
7. 文件的写入与追加
7.1 write()方法

write()方法用于向文件写入内容。如果文件不存在,则创建文件;如果文件已存在且以'w'模式打开,则覆盖原有内容。

file_object.write(str)
  • str:要写入的字符串。
示例
with open('test.txt', 'w', encoding='utf-8') as f:  
    f.write('Hello, Python!\n')
7.2 append()模式

使用'a'模式打开文件时,会向文件末尾追加内容,而不会覆盖原有内容。

with open('test.txt', 'a', encoding='utf-8') as f:  
    f.write('This is a new line.\n')
8. 文件指针的操作
8.1 tell()方法

tell()方法用于获取当前文件指针的位置(即当前读写位置)。

position = file_object.tell()
示例
with open('test.txt', 'r', encoding='utf-8') as f:  
    print(f.tell())  # 文件刚开始时,指针在0位置  
    f.read(5)  
    print(f.tell())  # 读取5个字节后,指针移动到相应位置
8.2 seek()方法

seek()方法用于移动文件指针到指定位置。

file_object.seek(offset, whence=0)
  • offset:要移动的字节数。
  • whence(可选):起始位置,默认为0(文件开头),1表示当前位置,2表示文件末尾。
示例
with open('test.txt', 'r', encoding='utf-8') as f:  
    f.seek(5)  # 移动到文件的第5个字节位置  
    print(f.read())  # 从第5个字节开始读取文件内容

11. 文件的高级操作

11.1 文件的迭代

除了使用readline()和readlines()方法外,Python还允许我们直接迭代文件对象,从而逐行读取文件内容。

with open('test.txt', 'r', encoding='utf-8') as f:  
    for line in f:  
        print(line, end='')  # 去除额外的换行符
11.2 文件的上下文管理器

使用with语句可以确保文件在使用后正确关闭,这是处理文件时的最佳实践。with语句内部创建了一个上下文管理器,它会在代码块执行完毕后自动调用close()方法。

12. 文件的遍历与搜索

12.1 遍历文件内容

除了逐行遍历外,我们还可以根据特定的模式或条件遍历文件内容,例如使用正则表达式进行搜索。

import re  
  
with open('test.txt', 'r', encoding='utf-8') as f:  
    pattern = re.compile(r'\bpython\b', re.IGNORECASE)  
    for line in f:  
        if pattern.search(line):  
            print(line, end='')
12.2 搜索特定文件

在文件系统中搜索特定文件通常涉及到遍历目录结构。这可以通过os模块或pathlib模块实现。

13. 目录操作

13.1 获取当前工作目录

使用os.getcwd()函数可以获取当前工作目录的路径。

import os  
  
print(os.getcwd())
13.2 更改当前工作目录

使用os.chdir()函数可以更改当前工作目录。

os.chdir('/path/to/directory')
13.3 列出目录内容

使用os.listdir()函数可以列出指定目录的内容(文件名列表)。

files = os.listdir('.')  
print(files)

14. 路径操作

14.1 使用os.path

os.path模块提供了多种函数来处理文件路径。

  • os.path.join():跨平台地拼接路径。
  • os.path.exists():检查路径是否存在。
  • os.path.isdir():检查路径是否为目录。
  • os.path.isfile():检查路径是否为文件。
14.2 使用pathlib

pathlib是Python 3.4引入的一个面向对象的文件系统路径操作库,它提供了更直观、更易于理解的路径操作方式。

from pathlib import Path  
  
p = Path('.')  
print(p.absolute())  # 绝对路径  
print(p.glob('*.txt'))  # 匹配当前目录下的所有.txt文件

15. 文件的复制、移动与删除

15.1 复制文件

可以使用shutil模块来复制文件。

import shutil  
  
shutil.copy('source.txt', 'destination.txt')
15.2 移动文件

移动文件可以使用shutil.move()方法。

shutil.move('old_location.txt', 'new_location.txt')
15.3 删除文件

删除文件可以使用os.remove()函数或pathlib.Path.unlink()方法。

os.remove('file_to_delete.txt')  
# 或者  
p = Path('file_to_delete.txt')  
p.unlink()

16. 异常处理

在文件操作中,可能会遇到各种异常,如文件不存在、没有读写权限等。使用try...except语句可以捕获并处理这些异常。

try:  
    with open('nonexistent_file.txt', 'r') as f:  
        content = f.read()  
except FileNotFoundError:  
    print("文件不存在!")  
except IOError as e:  
    print(f"读取文件时发生错误:{e}")  
except Exception as e:  
    print(f"发生未知错误:{e}")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值