在使用Stata爬数据的时候经常会遇到这样一个问题,就是文件中有的行过长(大约超过两万个字符就很难处理了)。这个时候会无法直接读入Stata作为一个变量处理。在过去,我常用的折中办法是使用fileread()函数或者手动断行(当前这里需要用到Sublime Text3等编辑器的替换功能)。然而就在昨天晚上,我发现了一个永久解决这个麻烦的办法。
问题是这样出现的,我发现了这个接口:
http://stockdata.stock.hexun.com/gszl/data/jsondata/jbgk.ashx?count=5000&titType=null&page=1&callback=hxbase_json15
这个接口提供了json格式的全部沪深两市上市公司的基本信息,网页浏览的话是这样的:
如果把这个接口的数据下载为txt文件的话,你会发现这个文件只有一行,而且有200多万个字符。当然也可以通过修改接口的count参数和page参数分成100多次处理,但是效率肯定是非常低的。
Mac用户从这里阅读
我就觉得一定有处理文本文件的shell命令,然后找了一会儿,发现 命令可以实现,下面的shell命令就可以实现把文本中的所有 替换成换行符然后再使用重定向符 将结果输出至另外一个文件 的操作:
打开
然后就很容易处理啦,下面的代码就能整理好这份数据了:
整理结果:
此外上面代码中的下面这几行代码
实际上是可以换成下面的这一句:
附注utrans命令是我自己编写的用于快速转码的命令, 代码如下:
Windows用户从这里阅读
Windows的Powershell环境可以进行文件内容的替换, 但是很尴尬的是powershell中的换行符是`n, 而下面的语句:
非常巧妙地与Stata中的局部宏的引用“撞衫”了! 所以上面的方法就不可行了.Windows系统并没有自带curl命令, 更没有tr命令, 所以首先得安装一下curl命令:
首先打开命令提示符,输入 找到powershell.exe的位置, 然后找到它右键选择以管理员身份打开. 然后就会弹出来一个蓝色的命令行界面.
然后可以安装一个包管理工具choco(这里参考了这篇文章《在windows下使用choco作为包管理工具》). 在以管理员身份打开的powershell里依次输入下面几句命令:
然后是安装另外一个命令 , 这个命令的下载地址是:
http://batch-cn.qiniudn.com/tool/4.0.7/sed.exe
下载之后将 文件放入 即可.
如果你成功的安装好了curl和sed之后, 下面的命令就能实现了自动换行了:
最后
领取专属 10元无门槛券
私享最新 技术干货