Python青少年简明教程:文件处理

Python青少年简明教程:文件处理

计算机科学中的文件是指存储在计算机存储设备上的数据集合。这些数据可以是程序代码、文本、图像、音频、视频等各种形式的信息。在计算机科学中,文件通常被分为两类:文本文件和二进制文件。

每个文件都有一个唯一的文件名,用于标识该文件。文件名通常由两个部分组成:名字和扩展名(例如,document.txt 中,document 是名字,.txt 是扩展名)。

文件路径(File Path):

文件路径是指文件在计算机文件系统中的位置。路径可以是绝对路径或相对路径。

    绝对路径:从根目录开始的完整路径(例如,C:/Users/Username/Documents/file.txt)。

    相对路径:相对于当前工作目录的路径(例如,./file.txt,其中 . 代表当前目录)。

文件扩展名是文件名中的后缀,用于标识文件的类型或格式。

【在Windows操作系统中,尽管标准目录分隔符是反斜杠(\),但系统通常也能识别斜杠(/)作为目录分隔符。Unix/Linux系统使用斜杠作为目录分隔符。在许多编程语言中(包括Python),推荐使用斜杠(/)作为路径分隔符,因为它具有更好的跨平台兼容性。】

常见的扩展名包括 .txt(文本文件),.jpg(图像文件),.mp3(音频文件),.mp4(视频文件),.exe(可执行文件)等。

在 Python 中,文件处理是一个常见的任务。Python 和文件之间的交互是 Python 编程中非常重要的一部分。Python 提供了多种方式如内置函数和库来读写文件,这使得处理文件变得既简单又高效。

使用内置的 open() 函数读写文件

Python 提供了内置的 open() 函数和一系列操作文件的标准方法。这些方法包括文件的读、写、追加以及文件的关闭。

Python内置的 open() 函数基本语法如下:

file = open(file_path, mode='r')

参数说明:

参数较多常用的是这两个。

file_path:文件路径,可以是绝对路径或相对路径。

【使用open()函数处理文件时,注意路径问题

绝对路径(Absolute Path):从根目录开始指定文件的完整路径。例如:

以Windows系统为例: C:\\Users\\Username\\Documents\\my_data.csv  或 C:/Users/Username/Documents/my_data.csv

相对路径(Relative Path):相对于当前工作目录的路径。例如:

my_data.csv(指当前目录下的my_data.csv文件)

./my_data.csv(同样指当前目录下的文件)

../my_data.csv(指上一级目录下的my_data.csv文件)】

mode:文件打开模式,指定文件的读写方式。常用的模式包括:

    'r':读取模式(默认)。文件必须存在。

    'w':写入模式。如果文件存在,会覆盖文件内容;如果文件不存在,会创建新文件。

    'a':追加模式。文件指针在文件末尾,不会覆盖文件内容。如果文件不存在,会创建新文件。

    'b':二进制模式。例如,'rb'表示以二进制模式读取文件,'wb'表示以二进制模式写入文件。

    'x':独占创建模式。如果文件已经存在,操作会失败。

't':文本模式(默认)。用于文本文件,'rt'表示以文本模式读取文件,'wt'表示以文本模式写入文件。

其它参数还有

如:encoding='utf-8'

open() 使用系统默认的字符编码(通常是 UTF-8),但你可以通过 encoding 参数指定其他编码方式。

文件在计算机系统中通常可以分为两大类:文本文件和二进制文件。

文本文件(Text Files)

特点:

    文本文件是以 字符 为单位存储数据的文件,这些字符通常是可读的,即可以直接被人类理解。

    常见的文本文件格式有 .txt、.csv、.html、.py、.json 等。

    文本文件通常使用特定的字符编码方式,例如 UTF-8、ASCII 等。

读取方式:

读取文本文件时,可以直接使用字符串操作,因为文本文件中的数据是以可见字符存储的。

    可以使用 'r' 模式打开文本文件进行读取。

二进制文件(Binary Files)

特点:

    二进制文件以 字节 为单位存储数据,数据通常不直接对应人类可读的字符,必须经过适当的解码或解析才能理解。

    常见的二进制文件格式有 .png、.jpg、.exe、.bin、.zip、.mp3、.mp4 等。

    二进制文件包含的内容可以是任何形式的数据:图像、音频、视频、可执行程序等。

读取方式:

    读取二进制文件时,数据以字节流的形式获取,通常需要使用 'rb' 模式来打开文件。


写入文本文件

写入文件有多种方式。需要注意的是,如果使用 'w' 模式,会覆盖文件内容,而 'a' 模式则会在文件末尾追加内容。
1 写入字符串
with open('example.txt', 'w') as file:
    file.write('Hello, world!')
2 写入多行
lines = ['First line\n', 'Second line\n', 'Third line\n']
with open('example.txt', 'w') as file:
    file.writelines(lines)
3 追加内容
使用 'a' 模式可以向现有文件追加内容。
with open('example.txt', 'a') as file:
    file.write('This is an additional line.\n')

读取文本文件

1 读取整个文件内容
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)
2 逐行读取
with open('example.txt', 'r') as file:
    for line in file:
        print(line.strip())  # `strip()` 去掉行末的换行符
3 读取指定大小的数据
with open('example.txt', 'r') as file:
    chunk = file.read(1024)  # 读取 1024 字节
    print(chunk)

二进制文件读写

对于图片、音频等二进制文件,可以使用 'b' 模式读取或写入。
读取二进制文件:
with open('image.png', 'rb') as file:
    data = file.read()
    # 处理二进制数据

写入二进制文件:
with open('output.bin', 'wb') as file:
    file.write(data)

说明:在 Python 中with 语句是一个非常有用的上下文管理器(context manager),主要用于简化资源管理,确保资源在使用完毕后能够被正确地释放。在不使用 with 语句的情况下,你通常需要手动打开和关闭文件(或其他资源),以避免资源泄漏或文件未及时关闭的问题。例如:
with open('example.txt', 'r') as file:
    content = file.read()
    # 文件操作
在这个例子中,with 语句确保文件在读取操作完成后自动关闭,无需显式调用 file.close()方法。
不使用 with 语句,你需要这样写:
file = open('example.txt', 'r')
content = file.read()
# 文件操作
file.close() # 文件在使用后关闭
或,更好的写法是:
file = open('example.txt', 'r')
try:
    content = file.read()
    # 文件操作
finally:
    file.close() # 文件在使用后关闭
这种情况下,try-finally 块用于确保即使在读取文件时发生异常,文件也会被正确关闭。

关闭文件

当使用 open() 函数打开文件时,处理完后应调用 file.close() 方法关闭文件。未关闭文件可能会导致内存泄漏或其他问题。
为了避免忘记调用 close(),通常推荐使用 with 语句。

下面给出使用 Python 内置的 open() 函数处理文本文件的完整示例:

# 1. 创建并写入文本文件
with open('example.txt', 'w', encoding='utf-8') as file:
    file.write("Hello, world!\n")
    file.write("这是一个关于处理文件的示例。\n")

# 2. 读取文本文件
with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print("文件内容:")
    print(content)

# 3. 逐行读取文件
with open('example.txt', 'r', encoding='utf-8') as file:
    print("逐行读取文件内容:")
    for line in file:
        print(line.strip())

# 4. 追加内容到文本文件
with open('example.txt', 'a', encoding='utf-8') as file:
    file.write("追加新行1。\n")
    file.write("追加新行2。\n") 

# 5. 再次读取文件内容以验证追加操作
with open('example.txt', 'r', encoding='utf-8') as file:
    content = file.read()
    print("追加内容后的文件内容:")
    print(content)

运行输出:

文件内容:
Hello, world!
这是一个关于处理文件的示例。

逐行读取文件内容:
Hello, world!
这是一个关于处理文件的示例。
追加内容后的文件内容:
Hello, world!
这是一个关于处理文件的示例。
追加新行1。
追加新行2。

 

文件和目录操作

Python 的 os 和 shutil 模块都是内置模块。

官方文档:

https://docs.python.org/zh-cn/3/library/os.html

https://docs.python.org/zh-cn/3/library/shutil.html

os 模块:提供了一些与操作系统交互的功能,是 Python 标准库的一部分。使用 os 模块,你可以进行文件和目录操作、管理环境变量、执行系统命令等。

shutil 模块:也是 Python 标准库的一部分,它依赖于 os 模块,并提供了更高级的文件操作,如复制文件、递归复制目录、压缩和解压缩文件等。

由于它们是内置模块,使用时不需要进行额外的安装,只需直接 import os 或 import shutil 即可使用。

os模块使用略举一二

☆获取当前工作目录
os.getcwd()
例如:
import os
print(os.getcwd()) 

☆列出指定目录的文件和目录
os.listdir(path)
例如:
import os
print(os.listdir('.'))  # 列出当前目录下的所有文件和目录 

☆检查文件是否存在
os.path.exists(path)
例如:
import os
if os.path.exists('example.txt'):
    print('文件存在')
else:
    print('文件不存在')

☆删除文件
os.remove(path)
例如:
import os
os.remove('example.txt')

☆获取文件大小
os.path.getsize(path)
例如:
import os
size = os.path.getsize('example.txt')
print(f'文件大小: {size} 字节')

shutil模块使用略举一二

☆复制文件:
shutil.copy(src, dst)只复制文件内容和权限
shutil.copy2(src, dst) 还会复制文件的元数据(如修改时间)
例如:
import shutil
shutil.copy('source.txt', 'destination.txt')  # 复制文件

☆复制目录
shutil.copytree(src, dst)
例如:
import shutil
shutil.copytree('src_folder', 'dst_folder')  # 递归复制整个目录

☆删除目录及其内容
shutil.rmtree(path)
例如:
import shutil
shutil.rmtree('folder_to_delete')  # 递归删除目录及其所有内容

处理CSV格式文件

CSV(Comma-Separated Values)是一种常见的文件格式,主要用于以纯文本形式存储表格数据。CSV格式以其简单性和广泛的支持被广泛应用于数据存储和传输,特别适合处理结构化的表格数据。

由于 CSV 文件只是一个文本文件,你几乎可以在任何文本编辑器中创建一个。你也可以从几乎任何电子表格程序中导出 CSV 文件,如 Microsoft Excel。

CSV文件通常由行和列组成,每一行代表表格中的一条记录,而每一列代表记录中的某个字段。各字段之间通常用逗号(,)分隔。

第一行可以存在一个可选的标题头,格式和普通记录行的格式一样。标题头要包含文件记录字段对应的名称,应该有和记录字段一样的数量。

每一行记录位于一个单独的行上,用回车换行符CRLF(也就是\r\n)分割。整个文件中每行应包含相同数量的字段,各字段之间通过分隔符分隔,现代用法分隔符不仅限于逗号,还可以是分号、制表符或空格。每个字段可用也可不用半角双引号(")括起来,如果字段中包含逗号,通常会用引号将该字段括起来,如果用双引号括字段,那么出现在字段内的双引号前必须加一个双引号进行转义。

例如:

姓名,年龄,城市
张三,25,北京
李四,30,上海
王五,28,广州

提示,分隔符通常是半角字符。

CSV格式文件更多情况可见 https://docs.fileformat.com/zh/spreadsheet/csv/#google_vignette

使用内置的open()函数处理csv文件

Python可以使用上面介绍的内置的open()函数处理csv文件

写入CSV文件

写入 CSV 文件时,需要手动将数据转换为字符串,并用逗号分隔各个字段。写入时需要注意正确处理换行符,以确保每行数据按正确的格式写入文件中。示例:

# 要写入CSV文件的数据
data = [
    ['姓名', '年龄', '城市'],
    ['张三', '25', '北京'],
    ['Bob', '26', 'New York']
]

# 打开文件并写入内容
with open('demo.csv', 'w', encoding='utf-8') as file:
    for row in data:
        # 将列表转换为逗号分隔的字符串,并添加换行符
        line = ','.join(row) + '\n'
        file.write(line)

说明:join() 方法用于将列表中的元素连接成一个字符串,中间以逗号分隔。每行的末尾需要添加换行符 \n。

读取CSV文件

当使用 open() 函数读取 CSV 文件时,你需要手动处理文件内容的解析,将每行的内容按逗号分隔,并处理不同的数据类型(如字符串、整数、浮点数等)。示例:

# 打开文件并读取内容
with open('demo.csv', 'r', encoding='utf-8') as file:
    for line in file:
        # 移除行末的换行符并按逗号分割
        fields = line.strip().split(',')
        print(fields)

说明:strip() 函数用于移除行末的换行符 \n。split(',') 方法用于按逗号分割字符串,将其转换为列表。

显示为:

['姓名', '年龄', '城市']
['张三', '25', '北京']
['Bob', '26', 'New York']

使用内置的csv模块处理csv文件

除此之外,Python提供了强大的工具来处理CSV文件,主要通过内置的csv模块,以及第三方库如pandas,第三方库需要额外安装库。在此,我们关注使用内置的csv模块读写CSV文件。

Python的标准库包含一个名为csv的模块,它提供了用于读写CSV文件的类和函数。下面是使用csv模块处理CSV文件的基本步骤。

1.写入CSV文件

使用csv.writer()来写入CSV文件。示例:

import csv

# 准备数据
header = ['姓名', '年龄', '城市']
data = [
    ['张三', 25, '北京'],
    ['李四', 30, '上海'],
    ['王五', 28, '广州']
]

# 打开(或创建)CSV文件
with open('my_data.csv', mode='w', encoding='utf-8', newline='') as file:
    csv_writer = csv.writer(file)
    
    # 写入表头
    csv_writer.writerow(header)
    
    # 写入数据
    csv_writer.writerows(data)

解释:

open()函数用于处理文件,mode='w'表示以写模式打开文件,newline=''防止写入时出现多余的空行(尤其在Windows系统上)。

csv.writer(file)创建一个CSV写入器对象。

csv_writer.writerow(header)写入一行数据。

csv_writer.writerows(data)批量写入多行数据。

2.读取CSV文件

使用csv.reader()来读取CSV文件,将文件内容逐行读取为Python的列表(List)。示例:

import csv

# 打开CSV文件
with open('my_data.csv', mode='r', encoding='utf-8') as file:
    csv_reader = csv.reader(file)
    
    # 获取表头(可选)
    header = next(csv_reader)
    print("Header:", header)
    
    # 逐行读取CSV文件内容
    for row in csv_reader:
        print(row)

解释:

open()函数用于处理文件,mode='r'表示以读模式打开文件,encoding='utf-8'用于指定编码格式(防止读取中文等非ASCII字符时出现问题)。

csv.reader(file)创建一个CSV读取器对象。

next(csv_reader)读取第一行数据,通常是表头。

通过循环for row in csv_reader来逐行读取剩余的数据。

3.使用csv.DictWriter和csv.DictReader

csv.DictWriter 和 csv.DictReader 是 Python csv 模块中的两个类,专门用于将 CSV 文件与 Python 字典(dict)相互转换。

csv.DictWriter 用于将字典对象写入 CSV 文件。你可以指定表头(即字典的键),然后将多行字典数据写入文件。

使用步骤:

打开或创建 CSV 文件。

创建一个 csv.DictWriter 对象,指定文件和表头。

使用 writeheader() 方法写入表头(可选)。

使用 writerow() 或 writerows() 方法写入一行或多行数据。

示例如下:

import csv

header = ['姓名', '年龄', '城市']
data = [
    {'姓名': '张三', '年龄': 25, '城市': '北京'},
    {'姓名': '李四', '年龄': 30, '城市': '上海'},
    {'姓名': '王五', '年龄': 28, '城市': '广州'}
]

with open('my_dict.csv', mode='w', encoding='utf-8', newline='') as file:
    csv_writer = csv.DictWriter(file, fieldnames=header)
    
    # 写入表头
    csv_writer.writeheader()
    
    # 写入数据
    csv_writer.writerows(data)

csv.DictReader 用于读取 CSV 文件,将文件中的每一行转换为字典对象。字典的键来自 CSV 文件的表头(即第一行的列名),而对应的值则是每一行的数据。使用步骤:

打开 CSV 文件。

创建一个 csv.DictReader 对象。

迭代这个对象,每次循环获取一行数据,返回的是一个字典。

示例如下:

import csv

with open('my_dict.csv', mode='r', encoding='utf-8') as file:
    csv_reader = csv.DictReader(file)
    
    # 逐行读取数据为字典
    for row in csv_reader:
        print(row)

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习&实践爱好者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值