Comma Separated Values,简称CSV,它是一种以逗号分隔数值的文件类型。在数据库或电子表格中,它是最常见的导入导出格式,它以一种简单而明了的方式存储和共享数据,CSV文件通常以纯文本的方式存储数据表。今天,我将给大家分享在Python中如何操作CSV文件。

一、数据源

首先,我们来看看本次操作的数据源,图1 CSV文件是在Excel中打开的,图2 CSV文件是在Notepad++中打开的,我们在图2中可以看到数值之间是以逗号分隔开的,每行末尾是CR回车符和LF换行符(请注意,Linux系统以LF结尾,MacOS系统以CR结尾)。

二、使用Python基本语法读写CSV文件

使用基本语法读取CSV文件中的数据大概思路是:获取文件对象,读取表头,按逗号分隔符拆分表头字段,使用for循环语句获取表体记录数据,拆分后再次写入另一张CSV文件中(如果要将数据写入xls*格式的文件中,请参考前期公众号文章),步骤如下:

Step 1:导入必要模块,获取输入输出文件路径。

import sys

infile = sys.argv[1]

outfile = sys.argv[2]

Step 2:使用open内置函数获取文件对象。

with open(infile, "r", newline='') as fr, open(outfile, "w", newline='') as fw:

Step 3:使用文件对象的readline方法或者迭代器的next方法读取表头(文件对象是一个迭代器对象,支持迭代协议),使用str.split方法对表头进行拆分(注意,要使用strip函数去掉尾部换行符)。

header = next(fr)

header = header.strip()

header_list = header.split(",")

Step 4:既然表头已经查分好了,我们需要将表头写入文件对象中(注意尾部需要添加一个换行符哦)。

fw.write(",".join(map(str, header_list)) + "\n")

当然,上面的代码也可以这么写:

print(*header_list, sep=",", file=fw)

Step 5:使用for循环读取表体数据,并将其拆分成列表写入到文件中。

for row in fr:

row = row.strip()

row_list = row.split(",")

fw.write(",".join(map(str, header_list)) + "\n")

以上步骤完成后,在命令提示符中输入:

python csvrw.py inputfile.csv outputfile.csv

输入输出csv文件名称以及脚本名称请自定义,以上只是举例说明。

以上代码如下:

三、使用csv模块读写CSV文件

csv模块是Python内置的一个模块,它考虑了csv文件中的各种复杂情况,平时处理文件基本上使用此模块,下面来看看csv模块处理csv文件的方式,其步骤如下:

Step 1:首先,导入必要模块,获取输入输出文件路径。

import sys

import csv

infile = sys.argv[1]

outfile = sys.argv[2]

Step 2:使用open内置函数获取文件对象。

with open(infile, "r", newline='') as incsv, open(outfile, "w", newline='') as outcsv:

Step 3:使用csv模块中的reader和writer函数分别获取reader和writer对象。

freader = csv.reader(incsv, delimiter=",")

fwriter = csv.writer(outcsv, delimiter=",")

Step 4:使用for循环语句读取和写入数据。

for rowlist in freader:

fwriter.writerow(rowlist)

以上步骤完成后,在命令提示符中输入相应命令即可(请参照)

代码如下:

四、使用pandas读写CSV文件

pandas库是一个强大的数据处理和数据分析库,使用pandas处理csv文件更简单,其步骤如下:

Step 1:首先,导入必要模块,获取输入输出文件路径。

import sys

import pandas as pd

infile = sys.argv[1]

outfile = sys.argv[2]

Step 2:使用pandas的read_csv方法将数据存储到一个DataFrame对象中。

dataframe = pd.read_csv(infile)

Step 3:然后使用DataFrame的to_csv方法将其输出到另一张csv表中。

dataframe.to_csv(outfile, index=False)

以上步骤完成后,在命令提示符中输入相应命令即可(请参照)

代码如下:

 

CSV文件在Python中的几种处理方式的更多相关文章

  1. python中的三种输入方式

    python中的三种输入方式 python2.X python2.x中以下三个函数都支持: raw_input() input() sys.stdin.readline() raw_input( )将 ...

  2. python 中的三种等待方式

    为什么要用等待时间: 今天在写App的自动化的脚本时发现一个元素,但是往往执行脚本是报错( An element could not be located on the page using the ...

  3. Python中的三种数据结构

    Python中,有3种内建的数据结构:列表.元组和字典.1.列表     list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目.列表中的项目.列表中的项目应该包括在方括号中,这 ...

  4. Python 中的几种矩阵乘法 np.dot, np.multiply, *【转】

    本文转载自:https://blog.csdn.net/u012609509/article/details/70230204 Python中的几种矩阵乘法1. 同线性代数中矩阵乘法的定义: np.d ...

  5. 简单谈谈Python中的几种常见的数据类型

    简单谈谈Python中的几种常见的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等 ...

  6. Java学习-014-文本文件写入实例源代码(两种写入方式)

    此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 第一种:文本文件写入,若文件存在则删除原文件,并重新创建文件.源代码如下所示: /** * @fun ...

  7. Asp.Net中的三种分页方式

    Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等. 第一种:使用Grid ...

  8. SQL Server中的三种Join方式

      1.测试数据准备 参考:Sql Server中的表访问方式Table Scan, Index Scan, Index Seek 这篇博客中的实验数据准备.这两篇博客使用了相同的实验数据. 2.SQ ...

  9. PHP中的6种加密方式

    PHP中的6种加密方式 1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str  --  原始字符串. raw ...

随机推荐

  1. 集成学习-Adaboost 进阶

    adaboost 的思想很简单,算法流程也很简单,但它背后有完整的理论支撑,也有很多扩展. 权重更新 在算法描述中,权重如是更新 其中 wm,i 是m轮样本i的权重,αm是错误率,Øm是第m个基学习器 ...

  2. 洛谷 - P3469 - BLO-Blockade - 割点

    https://www.luogu.org/problem/P3469 翻译:一个原本连通的无向图,可以删除图中的一个点,求因为删除这个点所导致的不连通的有序点对的数量.或者说,删去这个点之后,各个连 ...

  3. vue项目中引入循环执行setInterval或者requestAnimationFrame的用法等

    项目中循环计时处理某些方法的情况还是比较常见的,一般会用setInterval来处理,但是这个方法会似的页面卡顿等使用体验不好. 所以就使用浏览器提供的requestAnimationFrame方法, ...

  4. vscode学习(二)之显示中文异常解决办法

    异常原因:VSCODE默认是UTF-8编码打开文件的.如果遇到了像GB18030 GBK等等的编码,就显示乱码了. 解决办法: 在设置文件中加入:"files.autoGuessEncodi ...

  5. 定义一个Book类,有书名,价格,作者等信息。定义相应的方法来改变这些属性的值。定义一个方法来显示Book的所有信息。

    package com.fs.test; public class Test { public static void main(String[] args) { // 先声明后赋值 book b;/ ...

  6. 单点登录之ajax跨域实现

    需求:相同根域名或不同根域名的两个域名,实现单点登录登出 原理: 以b站为例,b站的账号登录域名为passport.bilibili.com.主站为www.bilibili.com,游戏站为www.b ...

  7. Verilog中的Timescale作用

    很多时候,我们拿到已有的东西理所当然的用了,其实,你真的对你所使用的东西了解吗? 再次犯下这样的错误,是因为在把代码从Altera 的CycloneV移植到Xilinx的Spartan6上,我遇到了非 ...

  8. 升级完pip后出错:Traceback (most recent call last): File "/usr/bin/pip", line 11, in <module> sys.exit(__main__.main())

    今天在ubuntu上升级了pip,之后执行pip命令的时候就报错了: Traceback (most recent call last):   File "/usr/bin/pip" ...

  9. SpringCloud系列(一):Eureka 注册中心

    在演示spring cloud之前得要知道我们为什么需要微服务框架. 先讲讲我的经历,以前我们做项目时所有功能都写在一起,只是做了分层(模型,数据,业务),所有业务逻辑都写在业务层,刚开始还好,等时间 ...

  10. Wannafly挑战赛22 D 整数序列 (线段树维护三角函数值)

    链接:https://ac.nowcoder.com/acm/contest/160/D 来源:牛客网 整数序列 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语 ...