likes
comments
collection
share

Python,Numpy,Pandas以及SciPy的文件操作梳理总结

作者站长头像
站长
· 阅读数 30

前言:

笔者我啊,在学习阅读吴恩达机器学习相关算法的代码的时候,发现了不同算法中,对于不同的文件格式,不同的数据类型,文件操作极其复杂繁多,所以便于后续算法的理清,今天特意对这些进行总结。(好好清算清算这些旧账,哈哈哈)

当然,在此之前我们先搞懂几个知识点:

1.CSV文件:

定义: CSV文件,全称为Comma-Separated Values(逗号分隔值),是一种简单的文件格式,用于存储表格数据,如电子表格或数据库。CSV文件通常被我们用于在不同的应用程序之间交换数据,并且可以很容易地被大多数数据分析和数据库软件所读取。

CSV文件的特点:
  1. 纯文本:CSV文件是纯文本文件,可以被任何文本编辑器或编程语言读取和写入。

  2. 分隔符:字段(或列)通常由逗号(,)分隔。尽管逗号是最常见的分隔符,但也可以是分号(;)、制表符(\t)或其他字符。

  3. 行和列:CSV文件由行和列组成,类似于电子表格。每一行通常代表一个数据记录,每一列代表一个字段。

  4. 标题行:可选的标题行,位于文件的第一行,用于描述每列的数据字段名称。

  5. 跨平台:CSV文件格式在不同的操作系统中都是相同的,因此可以跨平台使用。

  6. 易于使用:CSV文件易于使用,可以通过简单的文本编辑器创建和编辑,也易于通过编程方式进行解析和生成。

笔者个人的理解总结:CSV就是文本形式的excel表格

示例CSV文件内容:
Name,Age,City
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago

在这个示例中,第一行(Name,Age,City)是标题行,列出了每列的字段名称。下面的每行代表一个数据记录,字段值由逗号分隔。

因为CSV文件因其简单性和通用性,所一他在数据管理和分析领域中得到了广泛应用。

2.异常处理:

定义: 异常处理是编程中的一种机制,用于处理程序执行过程中可能发生的错误或异常情况。

异常处理的基本概念:
  1. 异常(Exception)

    • 异常是程序运行时发生的错误或特殊情况,它中断了正常的程序流程。
  2. 异常类型

    • 每种异常都有一个类型,用于区分不同类型的错误。例如,在Python中,IOError是输入/输出错误的异常类型,ValueError是值错误的异常类型。
  3. 抛出异常(Raise an Exception)

    • 在某些条件下,程序可以主动抛出一个异常,以表示发生了错误。
  4. 捕获异常(Catch an Exception)

    • 使用特定的语法捕获可能发生的异常,并在异常发生时执行替代的代码路径。
  5. 处理异常(Handle an Exception)

    • 对捕获的异常进行处理,例如记录错误信息、释放资源、向用户提供反馈等。
  6. 传播异常(Propagate an Exception)

    • 如果当前的代码块没有处理捕获的异常,异常将向上传播到调用栈中的上一层,直到被处理或导致程序终止。
异常处理的一般流程:
  1. 尝试执行代码

    • 使用try块包裹可能抛出异常的代码。
  2. 捕获异常

    • 使用catchexcept块捕获特定的异常类型。
  3. 处理异常

    • except块中编写处理异常的代码。
  4. 继续执行

    • finally块中编写无论是否发生异常都要执行的代码,如资源清理。

代码解释(Python):

try:
    # 尝试执行的代码
    result = 10 / 0
except ZeroDivisionError:
    # 捕获并处理特定类型的异常
    print("不能除以零!")
finally:
    # 无论是否发生异常,都会执行的代码
    print("这是 finally 块,用于清理工作。")

在这个示例中,尝试执行的代码尝试除以零,这将抛出ZeroDivisionError异常。程序捕获这个异常,并打印一条错误消息,然后执行finally块中的代码。

总之,异常处理我觉得也就是个保险器的作用,它有助于俺们编写更加健壮和用户友好的程序。

一、Python本身文件操作

使用Python标准库进行文件操作

  1. 读取文件(多被我们用于txt类型的文件操作)

    with open('file.txt', 'r', encoding='utf-8') as file:
        content = file.read()
        print(content)
    
  2. 写入文件

    with open('output.txt', 'w', encoding='utf-8') as file:
        file.write('Hello, World!')
    
  3. 文件格式转换(例如,将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))
    
  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()
    
  5. 文件分割(按行分割):

    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是一个强大的数据分析库,它可以非常方便地读取和写入多种格式的文件。

  1. 读取CSV文件

    import pandas as pd
    
    df = pd.read_csv('data.csv')
    
  2. 写入CSV文件

    df.to_csv('output.csv', index=False)
    
  3. 读取Excel文件

    df = pd.read_excel('data.xlsx')
    
  4. 写入Excel文件

    df.to_excel('output.xlsx', index=False)
    
  5. 处理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用于涉及到数组或矩阵的文件操作)

  1. 保存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)
    
  2. 从文本或二进制文件加载NumPy数组

    # 从文本文件加载
    data_from_txt = np.loadtxt('data.txt')
    
    # 从二进制文件加载
    data_from_npy = np.load('data.npy')
    

四、SciPy文件操作

笔者之所以这里要提SciPy的文件操作,是因为在CV中或者涉及到图像的时候常常需要用SciPy突出matlab文件中的矩阵数据。

使用SciPy读取和写入Matlab文件

  1. 读取Matlab .mat 文件

    from scipy.io import loadmat
    
    # 加载.mat文件
    mat_data = loadmat('data.mat')
    
    # 访问文件中的变量
    variable = mat_data['variable_name']
    
  2. 将数据保存到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)
    

请注意,loadmatsavemat函数提供了与Matlab .mat 文件交互的简便方式。在使用loadmat时,返回的数据是一个字典,其中包含了文件中的所有变量。使用savemat时,你可以指定保存的格式(Matlab 4或7),并可以选择是否压缩数据。

另外,如果家人们在处理非常大的数组或复杂的数据结构,可能需要考虑使用HDF5格式,它可以通过h5py库在Python中进行操作,这种格式在存储大型或复杂数据集时更加高效。

总结:

以上就是我对于这三个库中对于文件操作的一些归纳整理,欢迎大家点赞,收藏和交流!O(∩_∩)O谢谢!大家

Reference:

Python文件读写详解(非常详细)

Python数据分析:使用NumPy读写文本文件

pandas文件读取和写入

转载自:https://juejin.cn/post/7377581109155217435
评论
请登录