Python,Numpy,Pandas以及SciPy的文件操作梳理总结
前言:
笔者我啊,在学习阅读吴恩达机器学习相关算法的代码的时候,发现了不同算法中,对于不同的文件格式,不同的数据类型,文件操作极其复杂繁多,所以便于后续算法的理清,今天特意对这些进行总结。(好好清算清算这些旧账,哈哈哈)
当然,在此之前我们先搞懂几个知识点:
1.CSV文件:
定义: CSV文件,全称为Comma-Separated Values(逗号分隔值),是一种简单的文件格式,用于存储表格数据,如电子表格或数据库。CSV文件通常被我们用于在不同的应用程序之间交换数据,并且可以很容易地被大多数数据分析和数据库软件所读取。
CSV文件的特点:
-
纯文本:CSV文件是纯文本文件,可以被任何文本编辑器或编程语言读取和写入。
-
分隔符:字段(或列)通常由逗号(
,
)分隔。尽管逗号是最常见的分隔符,但也可以是分号(;
)、制表符(\t
)或其他字符。 -
行和列:CSV文件由行和列组成,类似于电子表格。每一行通常代表一个数据记录,每一列代表一个字段。
-
标题行:可选的标题行,位于文件的第一行,用于描述每列的数据字段名称。
-
跨平台:CSV文件格式在不同的操作系统中都是相同的,因此可以跨平台使用。
-
易于使用:CSV文件易于使用,可以通过简单的文本编辑器创建和编辑,也易于通过编程方式进行解析和生成。
笔者个人的理解总结:CSV就是文本形式的excel表格
示例CSV文件内容:
Name,Age,City
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago
在这个示例中,第一行(Name,Age,City
)是标题行,列出了每列的字段名称。下面的每行代表一个数据记录,字段值由逗号分隔。
因为CSV文件因其简单性和通用性,所一他在数据管理和分析领域中得到了广泛应用。
2.异常处理:
定义: 异常处理是编程中的一种机制,用于处理程序执行过程中可能发生的错误或异常情况。
异常处理的基本概念:
-
异常(Exception):
- 异常是程序运行时发生的错误或特殊情况,它中断了正常的程序流程。
-
异常类型:
- 每种异常都有一个类型,用于区分不同类型的错误。例如,在Python中,
IOError
是输入/输出错误的异常类型,ValueError
是值错误的异常类型。
- 每种异常都有一个类型,用于区分不同类型的错误。例如,在Python中,
-
抛出异常(Raise an Exception):
- 在某些条件下,程序可以主动抛出一个异常,以表示发生了错误。
-
捕获异常(Catch an Exception):
- 使用特定的语法捕获可能发生的异常,并在异常发生时执行替代的代码路径。
-
处理异常(Handle an Exception):
- 对捕获的异常进行处理,例如记录错误信息、释放资源、向用户提供反馈等。
-
传播异常(Propagate an Exception):
- 如果当前的代码块没有处理捕获的异常,异常将向上传播到调用栈中的上一层,直到被处理或导致程序终止。
异常处理的一般流程:
-
尝试执行代码:
- 使用
try
块包裹可能抛出异常的代码。
- 使用
-
捕获异常:
- 使用
catch
或except
块捕获特定的异常类型。
- 使用
-
处理异常:
- 在
except
块中编写处理异常的代码。
- 在
-
继续执行:
- 在
finally
块中编写无论是否发生异常都要执行的代码,如资源清理。
- 在
代码解释(Python):
try:
# 尝试执行的代码
result = 10 / 0
except ZeroDivisionError:
# 捕获并处理特定类型的异常
print("不能除以零!")
finally:
# 无论是否发生异常,都会执行的代码
print("这是 finally 块,用于清理工作。")
在这个示例中,尝试执行的代码尝试除以零,这将抛出ZeroDivisionError
异常。程序捕获这个异常,并打印一条错误消息,然后执行finally
块中的代码。
总之,异常处理我觉得也就是个保险器的作用,它有助于俺们编写更加健壮和用户友好的程序。
一、Python本身文件操作
使用Python标准库进行文件操作
-
读取文件(多被我们用于txt类型的文件操作):
with open('file.txt', 'r', encoding='utf-8') as file: content = file.read() print(content)
-
写入文件:
with open('output.txt', 'w', encoding='utf-8') as file: file.write('Hello, World!')
-
文件格式转换(例如,将CSV转换为JSON):
import csv import json with open('data.csv', 'r', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) data = [row for row in reader] with open('data.json', 'w', encoding='utf-8') as jsonfile: jsonfile.write(json.dumps(data, indent=4))
-
文件压缩与解压(使用的是
zipfile
库):import zipfile # 压缩 with zipfile.ZipFile('archive.zip', 'w') as zipf: zipf.write('file.txt') # 解压 with zipfile.ZipFile('archive.zip', 'r') as zipf: zipf.extractall()
-
文件分割(按行分割):
with open('largefile.txt', 'r', encoding='utf-8') as file: for i, line in enumerate(file): with open(f'part_{i}.txt', 'w', encoding='utf-8') as part_file: part_file.write(line)
二、Pandas文件操作
使用Pandas库处理文件
Pandas是一个强大的数据分析库,它可以非常方便地读取和写入多种格式的文件。
-
读取CSV文件:
import pandas as pd df = pd.read_csv('data.csv')
-
写入CSV文件:
df.to_csv('output.csv', index=False)
-
读取Excel文件:
df = pd.read_excel('data.xlsx')
-
写入Excel文件:
df.to_excel('output.xlsx', index=False)
-
处理JSON文件:
# 读取JSON df = pd.read_json('data.json') # 写入JSON df.to_json('output.json', orient='records', lines=True)
注意:
进行文件操作时,应该考虑异常处理(例如,使用try-except
块来捕获并处理可能发生的IO错误),并确保在操作完成后正确关闭文件(使用with
语句可以自动管理文件的打开和关闭)。此外,对于大型文件,可能需要采用流式处理或分块读取/写入的方法来避免内存问题(这里不过过多解释,详细的大家可以自行搜索)。
三、NumPy文件操作
使用NumPy进行文件操作(我们经常把numpy用于涉及到数组或矩阵的文件操作)
-
保存NumPy数组到文本或二进制文件:
import numpy as np # 创建一个NumPy数组 data = np.array([[1, 2, 3], [4, 5, 6]]) # 保存到文本文件 np.savetxt('data.txt', data) # 保存到二进制文件 np.save('data.npy', data)
-
从文本或二进制文件加载NumPy数组:
# 从文本文件加载 data_from_txt = np.loadtxt('data.txt') # 从二进制文件加载 data_from_npy = np.load('data.npy')
四、SciPy文件操作
笔者之所以这里要提SciPy的文件操作,是因为在CV中或者涉及到图像的时候常常需要用SciPy突出matlab文件中的矩阵数据。
使用SciPy读取和写入Matlab文件
-
读取Matlab
.mat
文件:from scipy.io import loadmat # 加载.mat文件 mat_data = loadmat('data.mat') # 访问文件中的变量 variable = mat_data['variable_name']
-
将数据保存到Matlab
.mat
文件:from scipy.io import savemat # 要保存的数据字典 data_to_save = {'array1': np.array([1, 2, 3]), 'array2': np.array([[1, 2], [3, 4]])} # 保存到.mat文件,使用'-3'参数可以保存为HDF5格式 savemat('data.mat', data_to_save, format='4', do_compression=False)
请注意,loadmat
和savemat
函数提供了与Matlab .mat
文件交互的简便方式。在使用loadmat
时,返回的数据是一个字典,其中包含了文件中的所有变量。使用savemat
时,你可以指定保存的格式(Matlab 4或7),并可以选择是否压缩数据。
另外,如果家人们在处理非常大的数组或复杂的数据结构,可能需要考虑使用HDF5格式,它可以通过h5py
库在Python中进行操作,这种格式在存储大型或复杂数据集时更加高效。
总结:
以上就是我对于这三个库中对于文件操作的一些归纳整理,欢迎大家点赞,收藏和交流!O(∩_∩)O谢谢!大家
Reference:
转载自:https://juejin.cn/post/7377581109155217435