因为上次帮我们产品处理过一个文件,他想生成能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下乱码的解决的更多相关文章

  1. 导出CSV格式文件,用Excel打开乱码的解决办法

    导出CSV格式文件,用Excel打开乱码的解决办法 1.治标不治本的办法 将导出CSV数据文件用记事本打开,然后另存为"ANSI"编码格式,再用Excel打开,乱码解决. 但是,这 ...

  2. 【Python学习】csv库

    csv(Comma-Separated Values, 逗号分割值)是存储表格数据的常用文件格式. 它每一行都用一个换行符分隔,列与列之间用逗号分隔. 本地文件 Python的csv库可以非常简单地修 ...

  3. 使用Python自带的库和正则表达式爬取熊猫直播主播观看人气

    主要是体现代码的规范性 from urllib import request import re class Spider(): url = 'https://www.panda.tv/cate/lo ...

  4. Python爬虫:requests 库详解,cookie操作与实战

    原文 第三方库 requests是基于urllib编写的.比urllib库强大,非常适合爬虫的编写. 安装: pip install requests 简单的爬百度首页的例子: response.te ...

  5. utf-8编码的csv文件,用excel打开乱码,解决办法,在输出前加 0xEF,0xBB,0xBF三个char

    转自 http://blog.csdn.net/zcmssd/article/details/6086649 是由于输出的CSV文件中没有BOM. 什么是BOM? 在UCS 编码中有一个叫做”ZERO ...

  6. PHP生成UTF-8编码的CSV文件用Excel打开乱码的解决办法

    什么是BOM? 在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF.而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中.UCS规范建 ...

  7. Python语言程序设计(3)--数字类型及操作--实例3-天天向上的力量

    1.整数 2.浮点数 3.复数 4.数值运算操作符 5.数值运算函数 5.天天向上的力量:实例

  8. Python爬虫环境常用库安装

    1:urllib urllib.request这两个库是python自带的库,不需要重新安装,在python中输入如下代码: import urllibimport urllib.requestres ...

  9. day-9 sklearn库和python自带库实现最近邻KNN算法

    K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...

随机推荐

  1. wallet.metamask.io 网页版钱包 connecting unknown network导致页面卡住

    之前在还不是十分懂用的时候想要用其连接本地的打开的ganache,所以就像使用本地插件的metamask一样,点击custom rpc,然后输入http://localhost:7545,然后页面就一 ...

  2. PAT A1149 Dangerous Goods Packaging (25 分)——set查找

    When shipping goods with containers, we have to be careful not to pack some incompatible goods into ...

  3. OCP 12c题库出现大量新题,062新题-第21题

    choose three Which three statements are true about Oracle checkpoint processing? A) Incremental chec ...

  4. 【Codeforces 1137A】Skyscrapers

    Codeforces 1137 A 题意:给一个矩阵,问对于每一个格子\((x,y)\),把第\(x\)行和第\(y\)列的值取出,要求将它们每一个赋上一个正整数,要求同一行.列中大小关系依然相同,问 ...

  5. 【NOIP2017 D1T3】逛公园

    NOIP2017 D1T3 逛公园 题意:给一个有向图,每条边有权值,问从\(1\)到\(N\)的长度不超过最短路长度\(+K\)的路径条数.如果有无数条则输出\(-1\). 思路:我们首先扔掉\(- ...

  6. Android学习之基础知识十二 — 第一讲:网络技术的使用

    这一节主要讲如何在手机端使用HTTP协议和服务器端进行网络交互,并对服务器返回的数据进行解析,这也是Android中最常用的网络技术. 一.WebView的用法 有时候我们可能会碰到比较特殊的需求,比 ...

  7. 关于for,while,dowhile效率测试

    引言 大家都知道每种循环对应的效率是不同的,书中都说在循环中使用减法的效率是比加法的效率高的,具体情况是怎么样,我们将详细列出各循环的执行效率问题.本文通过查看汇编代码比较各循环的效率以及i++,++ ...

  8. Luogu3232 HNOI2013 游走 高斯消元、期望、贪心

    传送门 这种无向图上从一个点乱走到另一个点的期望题目好几道与高斯消元有关 首先一个显然的贪心:期望经过次数越多,分配到的权值就要越小. 设$du_i$表示$i$的度,$f_i$表示点$i$的期望经过次 ...

  9. Part 6:静态文件--Django从入门到精通系列教程

    该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. 前面我们编写了一个经过测试的投票应用,现在让 ...

  10. tomcat内存溢出问题记录

    问题说明:公司内网环境中部署的jenkins代码发版平台突然不能访问了,查看tomcat的catalina.out日志发现报错如下: [root@redmine logs]# tail -f /srv ...