零基础学 Python——文件操作详解

亲爱的亦菲彦祖们,大家好!在编程的世界里,文件操作是一项基本而重要的技能。无论是读取数据、存储信息,还是管理文件和文件夹,掌握文件操作都能大大提升你的编程效率。今天,我们将一起深入探讨Python中的文件操作,内容将通俗易懂且详细,希望能帮助你们更好地理解和应用这些知识。

1. 文件操作的作用

什么是文件?

在计算机中,文件是用来存储数据和信息的基本单位。无论是文本文档、图片、音频,还是程序代码,都以文件的形式存在。通过文件操作,程序可以读取、写入和管理这些文件,从而实现数据的持久化和共享。

文件操作包含什么?

文件操作主要包括以下几个方面:

  • 打开文件:指定要操作的文件。
  • 读写文件:从文件中读取数据或向文件中写入数据。
  • 关闭文件:结束对文件的操作,释放资源。
  • 复制文件删除文件等其他操作。

文件操作的作用是什么?

文件操作的主要作用包括:

  • 读取内容:从文件中获取数据。
  • 写入内容:将数据保存到文件中。
  • 备份内容:复制文件以防数据丢失。
  • 管理文件和文件夹:创建、删除、重命名等操作。

总结:文件操作的作用就是将数据存储在文件中,便于程序在下次执行时直接使用这些数据,而无需重新生成,既省时又省力


2. 文件的基本操作

2.1 文件操作步骤

进行文件操作通常遵循以下步骤:

  1. 打开文件:指定要操作的文件及其模式(如只读、写入等)。
  2. 读写操作:根据需要读取文件内容或向文件写入数据。
  3. 关闭文件:结束文件操作,释放资源。

注意:即使不进行读写操作,也应及时关闭文件,以防数据泄露或资源占用。

2.2 打开文件

在Python中,使用open函数可以打开一个已存在的文件或创建一个新文件。其基本语法如下:

open(name, mode)
  • name:要打开的目标文件名的字符串(可以包含文件的具体路径)。
  • mode:设置打开文件的模式(访问模式),如只读、写入、追加等。
打开文件模式
模式描述
r以只读方式打开文件。文件指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在,原有内容将被删除;如果文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。行为同w模式。
w+打开一个文件用于读写。如果该文件已存在,原有内容将被删除;如果文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。行为同w+模式。
a打开一个文件用于追加。如果文件已存在,文件指针将放在文件结尾,新的内容将被写入;如果文件不存在,创建新文件。
ab以二进制格式打开一个文件用于追加。行为同a模式。
a+打开一个文件用于读写。如果文件已存在,文件指针将放在文件结尾;如果文件不存在,创建新文件。
ab+以二进制格式打开一个文件用于追加。行为同a+模式。
快速体验
f = open('test.txt', 'w')

注意:此时的fopen函数返回的文件对象,可以通过它进行后续的读写操作。

2.3 文件对象方法

写操作
  • 语法

    文件对象.write('内容')
    
  • 示例

    # 1. 打开文件
    f = open('test.txt', 'w')
    
    # 2. 文件写入
    f.write('hello world')
    
    # 3. 关闭文件
    f.close()
    

    注意

    1. 使用w模式和a模式:如果文件不存在,将创建新文件;如果文件存在,w模式会先清空文件再写入,a模式则直接在文件末尾追加内容。
    2. 使用r模式:如果文件不存在,将报错。
读操作
  • read()

    文件对象.read(num)
    
    • num表示要从文件中读取的数据的长度(单位是字节)。如果不传入num,则读取文件中的所有数据。
  • readlines()

    f = open('test.txt')
    content = f.readlines()
    
    # 输出示例
    ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
    print(content)
    
    # 关闭文件
    f.close()
    

    readlines()会按照行的方式一次性读取整个文件的内容,并返回一个列表,其中每一行的数据为一个元素。

  • readline()

    f = open('test.txt')
    
    content = f.readline()
    print(f'第一行:{content}')
    
    content = f.readline()
    print(f'第二行:{content}')
    
    # 关闭文件
    f.close()
    

    readline()一次读取一行内容。

2.4 关闭文件

文件对象.close()

关闭文件后,文件指针将不再指向该文件,释放系统资源。

2.5 使用with管理文件上下文

上述文件操作需要手动打开和关闭文件,较为麻烦。使用with语句可以自动管理文件上下文,确保文件在操作完成后自动关闭。

with open('test.txt', mode='r', encoding='utf-8') as f:
    text = f.read()
    print(text)

优点

  • 自动管理文件的打开和关闭,避免忘记关闭文件。
  • 代码更加简洁。

3. 文件夹及目录操作——OS模块

在日常使用计算机时,经常需要列出文件夹的内容、创建或删除文件和文件夹。Python提供了os模块,可以轻松实现这些操作。

3.1 OS目录操作

方法说明
os.mkdir创建目录
os.rmdir删除目录
os.rename重命名文件或目录
os.remove删除文件
os.getcwd获取当前工作路径
os.chdir修改当前工作目录
os.mkdir

创建一个新目录。

import os

os.mkdir('new_folder')
os.rmdir

删除一个空目录。

import os

os.rmdir('new_folder')
os.rename

重命名文件或目录。

import os

os.rename('old_name.txt', 'new_name.txt')

注意:如果目标文件不存在,将会报错。

os.remove

删除文件。

import os

os.remove('file_to_delete.txt')

注意:如果文件不存在,将会报错。

os.getcwd

获取当前程序的工作目录。

import os

current_dir = os.getcwd()
print(current_dir)  # 例如:'C:\\Users\\Administrator'
os.chdir

改变程序的工作目录。

import os

os.chdir('C:\\')
print(os.getcwd())  # 输出:'C:\\'

3.2 OS路径操作

os.path模块提供了许多跨平台的路径操作方法,使用这些方法可以编写更具兼容性的代码。

常用方法
方法说明
os.path.join连接目录与文件名
os.path.split分割文件名与目录
os.path.abspath获取绝对路径
os.path.dirname获取路径
os.path.basename获取文件名或文件夹名
os.path.splitext分离文件名与扩展名
os.path.isfile判断路径是否是一个文件
os.path.isdir判断路径是否是一个目录
os.path.exists检查文件或目录是否存在
示例
import os

# 获取当前工作目录
print(os.getcwd())  # 输出:'C:\\Users\\Administrator'

# 获取文件的绝对路径
print(os.path.abspath('hello.py'))  # 输出:'C:\\Users\\Administrator\\hello.py'

# 分离目录与文件名
print(os.path.split(os.path.abspath('.')))  # 输出:('C:\\Users', 'Administrator')

# 连接目录与文件名
print(os.path.join('C:\\Users', 'Administrator'))  # 输出:'C:\\Users\\Administrator'

# 分离文件名与扩展名
print(os.path.splitext('filename.txt'))  # 输出:('filename', '.txt')
检查路径
import os

# 获取文件或文件夹的路径
print(os.path.dirname('C:\\Users\\Administrator\\hello.py'))  # 输出:'C:\\Users\\Administrator'

# 获取文件名或文件夹名
print(os.path.basename('C:\\Users\\Administrator\\hello.py'))  # 输出:'hello.py'

# 判断路径是否是文件
print(os.path.isfile('C:\\Users\\Administrator\\hello.py'))  # 输出:True

# 判断路径是否是目录
print(os.path.isdir('C:\\Users\\Administrator'))  # 输出:True
案例一:显示当前目录中所有的文件
import os

current_dir = os.getcwd()
files = [f for f in os.listdir(current_dir) if os.path.isfile(os.path.join(current_dir, f))]
print("当前目录中的文件有:")
for file in files:
    print(file)
案例二:给所有的txt文件前加上前缀[前缀]
import os

def add_prefix_to_txt_files(folder_path, prefix):
    for filename in os.listdir(folder_path):
        if filename.endswith('.txt'):
            new_name = f"[{prefix}]{filename}"
            os.rename(os.path.join(folder_path, filename), os.path.join(folder_path, new_name))
    print("前缀添加完成。")

# 使用示例
add_prefix_to_txt_files('test_folder', '前缀')

4. 拓展:深浅拷贝

在Python中,对象的赋值和拷贝(深拷贝与浅拷贝)之间存在差异。如果不注意,可能会导致意外的结果。这主要是由于对象在内存中的引用关系所导致。

对象引用、浅拷贝、深拷贝

使用=赋值(对象引用)

=赋值:数据完全共享

使用=进行赋值时,两个变量指向同一个对象。如果对象是可变的(如列表),修改其中一个变量会影响另一个变量。

a = [1, 2, 3]
b = a
a[0] = 'surprise'

print(a)  # 输出:['surprise', 2, 3]
print(b)  # 输出:['surprise', 2, 3]
浅拷贝(copy

浅拷贝:数据半共享

浅拷贝会创建一个新的对象,但对于嵌套的子对象,仅复制了引用。即,如果子对象是可变的,修改子对象会影响到拷贝后的对象。

import copy

a = [1, 2, 3]
b = a.copy()
c = list(a)
d = a[:]

a[0] = 'integer lists are boring'

print(a)  # 输出:['integer lists are boring', 2, 3]
print(b)  # 输出:[1, 2, 3]
print(c)  # 输出:[1, 2, 3]
print(d)  # 输出:[1, 2, 3]

对于嵌套对象:

import copy

a = [1, 2, 3, [4, 5, 6]]
b = copy.copy(a)
a[3][0] = "surprises"

print(b)  # 输出:[1, 2, 3, ['surprises', 5, 6]]
深拷贝(deepcopy

深拷贝:数据完全不共享

深拷贝会递归地复制所有层级的对象,确保拷贝后的对象与原对象完全独立,互不影响。

import copy

a = [1, 2, 3, [4, 5, 6]]
b = copy.deepcopy(a)
a[3][0] = "surprises"

print(b)  # 输出:[1, 2, 3, [4, 5, 6]]

总结

  • copy.copy:浅拷贝,仅拷贝父对象,不会拷贝子对象。
  • copy.deepcopy:深拷贝,递归拷贝父对象及其所有子对象。

5. 练习题

亲爱的亦菲彦祖们,通过以下练习来巩固今天学习的内容吧!

练习1:文件读写

  1. 创建一个名为sample.txt的文件,并写入以下内容:

    Hello, Python!
    Welcome to file operations.
    
  2. 使用Python读取sample.txt的内容并打印出来。

  3. sample.txt的末尾追加一行:This is an appended line.

练习2:目录操作

  1. 在当前工作目录下创建一个名为test_dir的文件夹。

  2. test_dir中创建一个名为test_file.txt的文件,并写入一些内容。

  3. 重命名test_file.txtrenamed_file.txt

  4. 列出test_dir中所有的文件。

  5. 删除renamed_file.txttest_dir文件夹。

练习3:深浅拷贝

  1. 创建一个包含嵌套列表的列表,例如:

    original = [1, 2, [3, 4]]
    
  2. 使用浅拷贝和深拷贝分别创建两个新的列表。

  3. 修改原列表中的嵌套列表元素,观察浅拷贝和深拷贝后的列表变化。


6. 总结

今天,我们全面探讨了Python中的文件操作,包括:

  • 文件操作的作用:理解文件在数据存储和管理中的重要性。
  • 文件的基本操作:掌握打开、读写、关闭文件的基本步骤和方法。
  • OS模块的使用:学习如何通过os模块进行目录和路径的管理。
  • 深浅拷贝:了解对象赋值、浅拷贝与深拷贝的区别,避免潜在的编程错误。

掌握这些知识,亦菲彦祖们将在编程的道路上更加游刃有余。希望通过这篇博客,你们能对Python的文件操作有更深入的理解和应用。记得多练习哦,实践是学习编程最好的方式!

祝学习愉快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨胜增

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值