关于python 自带csv库的使用心得 附带操作实例以及excel下乱码的解决
因为上次帮我们产品处理过一个文件,他想生成能excel处理操作的。但是上次由于时间非常紧张,所以并没有处理好。
正好无聊就来好好研究一下 ,找算法要了几个 csv文件。来好好玩一玩。
全篇使用了python自带的csv的库
import csv
csv.reader(csvfile[, dialect='excel'][, fmtparam])
csv.writer(csvfile, dialect='excel', **fmtparams)
以及两个我没有尝试的字典读写方法,有兴趣的可以参照官方文档。
要来的文件用ide打开粗略一看是这样。
这里可以比较明显的注意到,这是我编译器ji进行的换行,所以其实在生成它们的时候并没有做换行处理。这其实非常糟糕。。给格式化操作带来了难度。
所以在excel中看应该是这样
一行到底,根本毫无可读性。。 而且这里注意,我们可以发现里面的中文字符已经可以正常显示了,而使用过csv或者有过类似操作经验的同学肯定遇到过,在生成csv后用excel打开中文字符都显示为乱码,而让人不知所措。
这里就要提到一个叫BOM(\xef\xbb\xbf)的东西。
可以参考一下这篇文章:http://segmentfault.com/a/1190000004321605
加上bom之后,就能被excel正确读取和识别了。这里注意,其实使用osx下的记事本或者别的ide或者是文本编辑器打开本身都没有什么问题。。但是excel就是需要bom。。哎没办法。本人测试了许多情况,似乎加上了bom也不会对原文本造成什么奇怪的影响。
这里我们使用这样的代码来给一个csv文件加上bom
def add_bom():
filename = 'issue_item_daily_stats.csv'
with open('{filename}'.format(filename=filename), 'r+b') as file:
file.writelines('\xef\xbb\xbf')
随后我们要做的就是把全部在一行的csv,格式化成我们想要的样子。 这里我直接贴一段我操作的代码 大家感受一下。
def read_format_csv():
filename = 'issue_item_daily_stats_part1.csv'
write_filename = 'change2.csv'
with open('{filename}'.format(filename=filename), 'rb') as csv_file:
csv_reader = csv.reader(csv_file)
with open('{write_filename}'.format(write_filename=write_filename), 'wb') as write_file:
items = []
csv_writer = csv.writer(write_file, dialect='excel')
csv_writer.writerow(["\xef\xbb\xbf"])
for line in csv_reader:
for index, i in enumerate(line):
if index == 0:
items.append(i)
continue
if index % 9 == 0:
csv_writer.writerow(items)
items = []
items.append(i)
else:
items.append(i)
这里的主要思路就是,从原文件中读取出需要格式化的信息,暂时保存在csv_reader里。然后重新打开一个文件,将csv_reader里获得的东西重新写入到新的文件里,下面可以看到我使用for循环对他进行遍历。
这里注意我在打开新文件的时候,就已经在头部写入了bom('\xef\xbb\xbf'),然后遍历csv_reader。这里csv_reader其实是每一行的一个迭代器对象。因为我们只有一行。然后遍历到的也就是第一行来得到一个数组。第一行里面数组有非常多的参数,都以',' 隔开。 所以我们再对数组进行遍历,然后按照文件的具体规则来就行格式化即可。
贴上一个格式化完毕的截图
就是这样,主要讲解一个csv文件格式化处理的思路。这里我并没有仔细介绍csv库。所以大家对这个库如果不熟悉,可以查阅一下资料和文档。 作为一个自带的轻量级操作csv的库我认为还是比较方便和好用的。处理更大型的csv文件我们还有pandas可以使用。到时候我碰到了再给大家介绍。
关于python 自带csv库的使用心得 附带操作实例以及excel下乱码的解决的更多相关文章
- 导出CSV格式文件,用Excel打开乱码的解决办法
导出CSV格式文件,用Excel打开乱码的解决办法 1.治标不治本的办法 将导出CSV数据文件用记事本打开,然后另存为"ANSI"编码格式,再用Excel打开,乱码解决. 但是,这 ...
- 【Python学习】csv库
csv(Comma-Separated Values, 逗号分割值)是存储表格数据的常用文件格式. 它每一行都用一个换行符分隔,列与列之间用逗号分隔. 本地文件 Python的csv库可以非常简单地修 ...
- 使用Python自带的库和正则表达式爬取熊猫直播主播观看人气
主要是体现代码的规范性 from urllib import request import re class Spider(): url = 'https://www.panda.tv/cate/lo ...
- Python爬虫:requests 库详解,cookie操作与实战
原文 第三方库 requests是基于urllib编写的.比urllib库强大,非常适合爬虫的编写. 安装: pip install requests 简单的爬百度首页的例子: response.te ...
- utf-8编码的csv文件,用excel打开乱码,解决办法,在输出前加 0xEF,0xBB,0xBF三个char
转自 http://blog.csdn.net/zcmssd/article/details/6086649 是由于输出的CSV文件中没有BOM. 什么是BOM? 在UCS 编码中有一个叫做”ZERO ...
- PHP生成UTF-8编码的CSV文件用Excel打开乱码的解决办法
什么是BOM? 在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF.而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中.UCS规范建 ...
- Python语言程序设计(3)--数字类型及操作--实例3-天天向上的力量
1.整数 2.浮点数 3.复数 4.数值运算操作符 5.数值运算函数 5.天天向上的力量:实例
- Python爬虫环境常用库安装
1:urllib urllib.request这两个库是python自带的库,不需要重新安装,在python中输入如下代码: import urllibimport urllib.requestres ...
- day-9 sklearn库和python自带库实现最近邻KNN算法
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...
随机推荐
- java 实现serialVersionUID
文章转自 https://www.cnblogs.com/duanxz/p/3511695.html 作用 serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制 ...
- linux公钥和私钥生成
1. 路径 cd /root/.ssh 2. 输入命令 ssh-keygen -t rsa 按三次回车 3. 会依次生成 id_rsa 私钥和 id_rsa.pub 公钥 [root@insure ...
- Python常见十六个错误集合,你知道那些?
使用python会出现各种各样的错误,以下是Python常见的错误以及解决方法. 1.ValueError: 'Conv2d_1a_3×3' is not a valid scope name 这个是 ...
- UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)
题目描写叙述: 定义合法的括号序列例如以下: 1 空序列是一个合法的序列 2 假设S是合法的序列.则(S)和[S]也是合法的序列 3 假设A和B是合法的序列.则AB也是合法的序列 比如:以下的都是合法 ...
- 复习整理9:SpringMVC应用以及源码解析
一:SpringMVC是什么 SpringMVC只是Spring的一个子框架,作用学过Struts2的应该很好理解,他们都是MVC的框架.学他就是用来代替Struts2的,那么为什么不用Struts2 ...
- CF1110E Magic Stones 差分
传送门 将原数组差分一下,设\(d_i = c_{i+1} - c_i\) 考虑在\(i\)位置的一次操作会如何影响差分数组 \(d_{i+1}' = c_{i+1} - (c_{i+1} + c_{ ...
- 实现Repeater控件的记录单选
有朋友问及,在Repeater控件中第一列放置一个RadioButton,实现对记录的单选. 下面Insus.NET想举个例子来实现与说明. 为Repeater控件准备数据: 在ASPX网页上,写好R ...
- 表单验证(AngularJs)
这次,学习angularjs的表单的验证,angularjs提供上表几种状态验证: 状态 描述 $invalid 未通过验证 $valid 经过验证 $pristine 未修改过 $dirty 修改 ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- 校内模拟赛 SovietPower Play With Amstar
SovietPower Play With Amstar 题意: 一棵二叉树,每次询问一条路径上的路径和,初始每个点有一个权值1,询问后权值变为0.$n \leq 10^7,m\leq10^6$ 分析 ...