Python数据分析基础——读写CSV文件

Python数据分析基础——读写CSV文件

参考文献:《Python数据分析基础》

一.CSV简概
CSV(comma-separated value,逗号分隔值)文件格式是一种非常简单的数据存储与分享方式。与Excel文件相比,CSV文件的一个主要优点是有很多程序可以存储、转换和处理纯文本文件。然而,当使用CSV文件时,确实会失去某些Excel功能:在Excel电子表格中,每个单元格都有一个定义好的“类型”(数值,文本,货币,日期等),CSV文件中的单元格则只是原始数据。使用CSV文件的另一个问题是它只能保存数据,不能保存公式。

二.读写CSV文件
基础Python,不使用csv模块
处理CSV文件,需先新建一个python脚本,命名为1csv_read_with_simple_parsing_and_write.py(为后续操作方便,可不必将脚本名称命名过长)。
在pycharm(或使用Spyder等)中输入下列代码:
Python数据分析基础——读写CSV文件_第1张图片
Python数据分析基础——读写CSV文件_第2张图片
向supplier_data.csv文件中添加数据

下面讨论一下每个代码块的含义

#!/usr/bin/env python3
import sys

第一行比较特殊,称为shebang行,在Python脚本中,应该一直将它作为第一行。因为以#开头为单行注释,所以Windows系统忽略这一行。不过像macOS这样基于Unix的系统却使用这一行,所以加入这一行可以使脚本在不同操作系统的计算机之间具有可移植性。
第二行导入python内置的sys模块,其作用可以在命令行窗口中向脚本发送附加的输入。

input_file = sys.argv[1]
output_file = sys.argv[2]

这两行代码使用sys模块的argv参数,argv参数是一个传递给Python脚本的命令行参数列表,即在命令行输入的内容。在Windows系统中,使用命令行参数读取CSV格式的输入文件和写入CSV格式的输出文件的样例:
在这里插入图片描述
(脚本名(空格)CSV输入文件路径和文件名(空格)CSV输出文件路径和文件名)
argv为一个特殊列表,argv[0]–>脚本名,argv[1]–>CSV输入文件路径和文件名,argv[2]–>CSV输出文件路径和文件名。

with open(input_file,'r',newline='') as filereader:
    with open(output_file,'w',newline='') as filerwriter:

这两行代码是文件的基本操作,这里就不详细赘述了,只提示一点,with语句,它可以在语句结束时自动关闭文件对象。

		header = filereader.readline()
        header = header.strip()
        header_list = header.split(',')

在这三行代码中,第一行使用文件对象的readline方法读取输入文件的第一行数据,在本例中,读入后将其作为字符串赋给header的变量。第二行,strip函数去掉header中的字符串两端的空格、制表符和换行符。第三行,使用split函数将字符串拆分成列表。效果如下:
在这里插入图片描述

		print(header_list)
        filerwriter.write(','.join(map(str,header_list))+'\n')

这两行代码中,第一行为打印上述head_list中的值。
第二行filewrite对象的write方法将head_list中的每个值写入输出文件。map函数将head_list的每个元素转换为字符串。join函数在head_list中的每一个值之间插入一个逗号,并将这个列表转换为一个字符串。’\n’不难理解,既然列标题已经输入,那么其对应的数据需换行输入,才能构成正确的格式。
如果对map函数的使用存在疑惑,这里提示一点:Python只能将字符串写入文件,所以数值数据存储到文件中,需先使用str函数或类似操作将其转换为字符串格式。

        for row in filereader:
            row = row.strip()
            row_list = row.split(',')
            print(row_list)
            filerwriter.write(','.join(map(str,row_list))+'\n')

最后这部分代码,是对文件中剩余行进行的集中处理。第一行创建了一个for循环,在输入文件剩余的各代中迭代。后面几行与上述处理标题行的操作有异曲同工之妙。
效果如下:
Python数据分析基础——读写CSV文件_第3张图片
下面在命令行窗口通工运行脚本做一下测试
1.打开一个命令行窗口
操作细节:Windows图标+R,然后输入cmd
Python数据分析基础——读写CSV文件_第4张图片

2.输入以下命令
cd Desktop(效果如下)
Python数据分析基础——读写CSV文件_第5张图片
3.运行Python脚本
以在桌面运行为例:
输入:脚本名(空格)CSV输入文件路径和文件名(空格)CSV输出文件路径和文件名
在这里插入图片描述
运行效果如下:
Python数据分析基础——读写CSV文件_第6张图片
问题引入
如果将最后两行的Cost改为6015.00和1006025.00,使用上述方法,输出格式还会与之前相同吗?
Python数据分析基础——读写CSV文件_第7张图片

让我们来看一看实际的情况:
Python数据分析基础——读写CSV文件_第8张图片
是不是和想象中的不太一样呢?通过比较,不难发现新修改的两个值的输出形式不是我们想要的,那为什么会变成这样呢?仔细观察新修改的两个值在表格中的形式,其中多出来了逗号。
脚本是按照行中的逗号分析每行数据的。此脚本对标题行和前10个数据行的处理都是正确的,因为它们没有嵌套到数据中的逗号。但是,脚本错误地拆分了最后两行,因为数据中有逗号。
如何解决这个问题?可以使用正则表达式的方法,但是,为了不使脚本复杂化,可以使用Python内置的csv模块,设计这个模块的目的就是为了方便灵活地处理复杂的csv文件。
下面介绍一下使用csv模块的做法。

基础Python,使用csv模块
新建一个python脚本,命名为2csv_reader_parsing_and_write.py(为后续操作方便,可不必将脚本名称命名过长)。
在pycharm(或使用Spyder等)中输入下列代码
Python数据分析基础——读写CSV文件_第9张图片
上面大部分代码与前一个脚本中的代码非常相似,思路也基本一致,所以只讨论一下有明显区分的代码。

import csv

声明csv模块

		filereader = csv.reader(csv_in_file, delimiter=',')
		filewriter = csv.writer(csv_out_file, delimiter=',')

使用csv模块的reader函数创建一个文件的读取对象,用来读取输入文件中的行。同理,使用writer函数创建文件写入对象,用来写入输出文件。第二个参数delimiter=’,'是默认分隔符,如果输入输出文件都是用逗号分隔,则不必指出该参数。其作用是为了防备输入文件和输出文件具有不同的分隔符。writerow函数将每行中的列表值写入输出文件。
运行该脚本,效果如下:
Python数据分析基础——读写CSV文件_第10张图片
结语
这篇博客主要介绍了CSV文件的读写,结合了书上的内容和小编的理解,进行了归纳总结。

你可能感兴趣的:(python数据分析,python,csv)