【Python3学习】3.这个超大文本文件有多少行?文件头是啥?前几行写了啥?
解说方式: 在程序源码中大量加入“#”注释进行讲解。
太长不看版本
拿到一个超百万行或者几个G的csv文件,EXCEL打不开,不知道有多少行,里面写了啥也不懂,这可咋整。
案例数据准备
用文本编辑器输入以下内容,另存为D:\workspace\in.csv
。
1 | userid,loginaddr,starttime,state |
具体操作
拿到的几个G文件里面都有啥?
中午新员工小马接到通知,要求配合公司审计工作,限期24小时提取后台百万级用户最新登录日志信息给审计组,审计人员要求提供的数据是文本文件,标注数据量,并且写一个数据字典给他们,方便他们导入数据库进行后续稽核。
小马虽然是个非技术出身的新兵蛋子,但是“遇事不明找厂家解决”的祖传经验早已烂熟于心,邮件一转、电话与厂家简单交代一番后,小马转身就投入到每日紧张的~~摸鱼~~工作中了。
临近下班领导也千交代万嘱咐地让他跟好进度,小马抄起电话就是一通催命,厂家说数据量很大而且今晚还有割接,没法那么快提供,不过还是信誓旦旦表示明早一定提供,小马看看还有时间,也就放心下班了。
次日上班,小马早早打开邮箱,看到厂家已经通过移动云盘转了一个几个G的csv文件,心里的石头也放下了,刚想转文件给审计,愕然发现厂家没有提供数据字典和数据量,协调其他人也叫不醒昨天导数的厂家,时间也不允许重新安排人员导数,小马此时急得像火锅上的螃蟹,正准备抓一个厂家祭天,一旁的胖驼按下了他手中四十米的大刀,关切地问有什么问题。
“审计中午急要的数据,厂家给我导了数,但是不告诉我有多少行,也没给我数据字典,你说我能不急吗?”小马说罢举刀又要和厂家拼命。
“既然那么着急,你自己看有多少行,自己写个简单的数据字典不就行了?”胖驼~~抢过刀踢远后~~不解地问道。
“几个G的文件,我EXCEL打开电脑都要死了,而且数据肯定都超过104万行了,这还怎么看?”小马答道。
“处理文本文件这还不简单,编程看一下不就行了。”胖驼松了一口气,“叫你早点数字化转型,学点Python,比你现在学刀法不知道强到哪里去。”
“那想必驼哥您这是有解药?还望不吝赐教!”小马关切地问。
“有是有,但是得自己学习自己动手哦。”胖驼语重心长地说。
“您说这是要上刀山还是下油锅,小马我在所不辞。”
“之前的几篇Python入门文章都看了么?”
“看是看了,但是不知道如何下手,看了后面忘了前面,没感觉对工作有什么帮助。”小马便挠头边说。
“ 你那是缺乏应用,多写就知道怎么用了。 我写个案例给你看看,你自己举一反三即可。”胖驼不紧不慢地说到,“你这种简单文本处理,我们用ipython敲几行就能解决, 都用不到什么IDE了。首先,你打开Anaconda Prompt
,进入你下载这个几个G文件的路径,然后运行ipython
。”
选择路径运行ipython
大文件路径为D:\workspace\in.csv
,我们先运行Anaconda Prompt
,依次输入:
1 | D: |
查看表头方法一:使用Pandas
第一个方法语句较为简单,我们可以利用Pandas包,帮我们解析和读取相关文件前几行内容。Pandas包功能强大,如果文件不是那么大,该方法甚至能直接读取行数。
1 | # #是注释,即#后的内容python程序不会执行,一般将解释放在#后面 |
查看表头方法二:with open
逐行读取
我们还可以用python的open语句打开csv文件,逐行读取,并将读取结果展示在界面上。
1 | # 用等号可以赋值,即将r"D:\workspace\in.csv"赋值给in_file,类似x=5 |
了解csv文件有几行
聪明如你应该已经发现在查看表头方法一:with open
逐行读取中,只要不print内容,不设置5行后跳出循环,就可以得到整个文件有多少行了,只要减去表头的1行,就知道有多少数据量了。
不过这里我们尝试不解码直接二进制读取行数,好处就是不会有编码解析失败报错停止问题。
1 | in_file = r"D:\workspace\in.csv" # 一样 |
通过上述几个步骤,小马很快地自己编程,看到了超大文件的表头样式,并依葫芦画瓢写了个简单的数据字典,在中午前补上了相关数据和附件,皆大欢喜。