关于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个最相似(即特征空间中最邻近)的 ...
随机推荐
- Solaris 11配置IPS安装系统包(类似linux中的yum源)
参考:http://blog.chinaunix.net/uid-8860-id-3777457.html 一. 概述: Solaris 11被称为第一个云操作系统,因此在很多方面体现了云系统的一些特 ...
- 【ZOJ 3463】Piano
ZOJ 3463 题意:有一个钢琴,一个人把左手放在L位置上,右手放在R位置上,要弹某\(n\)个键,每个手最多能够得着9个位置,并且两只手不能交叉.把手移动的代价是大拇指移动的距离的平方根.问弹完这 ...
- grep配置颜色显示
查日志时候必须要用的命令,为了在终端方便显示查看,可以加颜色和高亮等设置. 自己习惯用的: GREP_COLOR='a;b' a=4表示下划线,b=41表示红色背景高亮 在~/.bashrc文件中加 ...
- BZOJ4860 BJOI2017 树的难题 点分治、线段树合并
传送门 只会线段树……关于单调队列的解法可以去看“重建计划”一题. 看到路径长度$\in [L,R]$考虑点分治.可以知道,在当前分治中心向其他点的路径中,始边(也就是分治中心到对应子树的根的那一条边 ...
- Winio驱动在64位windows下无法使用的解决方法
C#在使用WinIo的驱动开发类似按键精灵一类工具的时候,需要对相关的驱动进行注册才能正常启动,找了下资料,资料来自: http://jingyan.baidu.com/article/642c9d3 ...
- NOIP2018 模拟赛(二十二)雅礼NOI
Preface 这次的题目都是NOI+的题,所以大家的分数都有点惨烈. 依靠T1大力骗分水到Rank2 所以想看正解的话看这里吧 A. 「雅礼NOI2018模拟赛(一) Day1」树 看一眼题目感觉十 ...
- nodejs-日志组件log4js的使用方法
log4js是在nodejs一个非常好用的日志组件,但是今天在使用的时候从网上查看的代码并不能运行(http://www.cnblogs.com/atp-sir/p/7070050.html),于是查 ...
- 如何在命令长度受限的情况下成功get到webshell(函数参数受限突破、mysql的骚操作)
0x01 问题提出 还记得上篇文章记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门),我们讲到了一些PHP的一些如何巧妙地绕过数字和字母受限的技巧,今天我要给大家分享的是如 ...
- 12.8 Daily Scrum
最近大家都比较忙,任务今天也才刚刚分配,所以具体的编码任务从明天开始. Tomorrow's Task 丁辛 完善餐厅列表,显示距离. 邓亚梅 美化搜索框 ...
- 《Gogoing》Alpha版会议总结
一.开会的过程 首先大家对自己的任务进行了汇报,然后大家就当前最需要解决的问题提出解决方案,最后相互鼓励,相互帮助,探讨下一步该怎么做. 二.讨论的问题 百度地图API代码和界面代码为什么对接不上? ...