查看原文
其他

爬虫俱乐部的精彩答疑--如何打开Excel中扩展名与文件源码不符的文件

爬虫俱乐部 Stata and Python数据分析 2023-01-01


本文作者:邱   沣,河南大学中原发展研究院

本文编辑:赵微微

技术总编:李婷婷

Stata&Python云端课程来啦!

      好消息好消息,爬虫俱乐部开辟小鹅通战场!!爬虫俱乐部隆重推出小鹅通网络课程,将Stata基础课程Stata进阶课程Python课程都上传至小鹅通平台,欢迎大家多多支持订阅!报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台留言哦。如需了解详情,可以通过课程链(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~



引言

内容好,讲得好,更要答疑好!我们爬虫俱乐部不仅有优质、丰富的Stata数据分析和网络爬虫课程,更有强大、负责、高效的答疑服务

在本次暑期培训中,我们爬虫俱乐部为同学们提供全天候的答疑服务,我们拥有优秀的答疑人员,创建了良好的交流环境。在答疑团队的不断努力下,同学们的学习热情日益高涨,求知欲越来越强,学习效率不断提高!

在面对答疑群内各种各样的问题时,答疑人员积极回复,有问必答,尤其是一些冷门刁钻的问题,都不会被遗漏!在我们打造的良好社区环境中,不仅如此除了答疑人员外,部分同学在看到别人提问后,也会积极贡献自己的解决方案。同时,李春涛教授和博士生薛原也在群内坐镇,负责处理棘手问题,为同学扫平一切障碍。


精彩答疑


精彩答疑

接下来仍然是精彩的答疑案例分享,供大家学习和参考。






答疑案例分享


今天分享的是一个比较冷门的问题:如何打开Excel中扩展名与文件源码不符的文件。在实际的数据分析处理中,我们从有些数据库下载的xls实际上源码是xml,用excel打开时候可能会有提示信息。

这种情况就是文件源码和扩展名不匹配,实际上并不是xls。面对这种情况,我们也有解决方案:

我们爬虫俱乐部的数据分析和网络爬虫大神:薛原博士生就提出了两种解决办法:

1.单个转的话,直接使用excel打开然后点击另存为xlsx即可;批量转换格式的话,可像wordconvert命令通过powershell调用MS Excel端口,自动打开每个文件然后另存为xlsx格式,再用import excel来读入。当然这样一来大家就得熟悉VBA编程语言或者使用Python的win32模块将xls文件批量转为xlsx文件。

这里我们提供一种Python的思路,来实现批量将xls文件批量转为xlsx文件。

import win32com.client as win32import os.pathimport os
def xlsToxlsx(xls_path,xlsx_path): for root, dirs, files in os.walk(xls_path, topdown=False): for name in files: str = os.path.join(root, name) if str.split('.')[-1] == 'xls': print(str) print(name) fname = str # 合成需要转换的路径与文件名 fname_tmp = xlsx_path + '\\' + name + 'x' # 合成准备存放转换好的路径与文件名 print(fname_tmp) excel = win32.gencache.EnsureDispatch('Excel.Application') # 调用win32模块 wb = excel.Workbooks.Open(fname) # 打开需要转换的文件 wb.SaveAs(fname_tmp, FileFormat=51) # 文件另存为xlsx扩展名的文件 wb.Close() excel.Application.Quit()

if __name__ == '__main__': xls_path = "你的xls文件目录" xlsx_path = "存储你新生成xlsx的文件目录"    xlsToxlsx(xls_path,xlsx_path)

2.观察文件本身是不是其实是别的格式,用对应的方式读取。比如:

(1)空格分隔的数据,可使用infile读入,例如我们要读入一个以空格为分隔符的成绩单数据

infile str4 name age math english using file2.txt, clear  //变量为字符型时,用str指明

(2)固定宽度的数据,可使用infix读入,如果变量单行排列,如图:

我们可以使用下面的程序进行读入:

infix str10 name 1-4 age 15-16 math 30-31 english 34-35 using file3.txt, clear

如果变量多行排列,如图:

我们可以使用下面的程序进行读入:

clear allcd g:/数据读入infix str100 v 1-100 using file4.txt, clearreplace v=v+"!"+v[_n+1] if mod(_n,2)==1 //将偶数行加到奇数行,中间用!进行分隔keep if mod(_n,2)==1 //保留奇数行compress //压缩空格gen name = substr(v,1,4) //将v变量中第一列开始4个字符生成新变量并命名为namegen age = substr(v,7,2)gen math = substr(v,11,2)gen english = substr(v,14,2)drop v //删除掉v变量br

以上两种读入方式的输出结果均为:

(3)逗号分隔、制表符分隔的数据,可使用import delimited读入,它的优点有其突破了infix和infile读入固定宽度(最大长度为524,275个字符)的限制、可以自定义分隔符等。

不指定分隔符时,Stata默认以逗号或制表符分隔:

import delimited name age math english using file1.txt, clear

指定分隔符时,如图,以下文件中是以$$作为分隔符的:

我们使用以下程序进行读入,其中asstring命令表示将字符串作为整体视为一个分隔符。比如,delimiters("first",asstring)是将“first”整体作为一个分隔符,而delimiters("first") 会将“f”、“i”、“r”、“s”、“t”都作为分隔符。
import delimited name age math english using file6.txt, delimiter("$$",asstring) clear //asstring表明$$整体为分隔符,否则认为$$两个字符分别为分隔符

以上程序的输出结果为:

以上就是本次分享的精彩答疑案例了,希望我们挑选出的案例对大家有所启发和帮助。





课程的集中答疑时间

我们的课程为帮助学员更好地学习,在周一到周日都安排了课程老师通过腾讯会议为学员们答疑解惑,届时,参加其他网课的学员也可以在所在的答疑群向授课老师咨询,预约满十人后,老师们就会通过腾讯会议面对面和大家交流,答疑。各个课程老师的答疑时间以及答疑主要内容如下:

此外,我们在每个答疑群都设置了两位到四位不等的常规答疑老师,学员遇到的问题,可以先在群里咨询常规答疑老师,复杂的问题可以通过常规答疑与授课老师预约office hour的咨询。

欢迎大家报名参与我们的课程学习,爬虫俱乐部将为您提供的零基础、无障碍的Stata数据分析和网络爬虫课程,更重要的是,讲得好不如答疑答的好!我们高效、强大、负责的答疑团队,将为您提供认真负责,细致入微的答疑服务。在这里,您的学习效率和效果将成倍提升,一站式购买,无后顾之忧。

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!





往期推文推荐
   
  【爬虫篇】解锁《梦华录》之东京繁华生活
      爬虫俱乐部的精彩答疑——DOS命令       爬虫俱乐部的精彩答疑之换行问题

爬虫俱乐部的精彩答疑--路径设置乱码怎么破?

爬虫俱乐部的精彩答疑--putdocx的二三事

爬虫俱乐部精彩答疑之Python篇

爬虫俱乐部的精彩答疑--花式重命名变量

      今天你还是“刘畊宏女孩”吗?

爬虫俱乐部在山东财经大学金融学院暑期Stata网课上的精彩答疑

JupyterNotebook——如何更换默认文档目录

Stata绘图系列——玩转绘图通用选项(一)

出人意料!这所大学的A级学科总数竟超越清华北大!

Stata数据读入——打开方式不同?

数据类型——Dict、Set与Frozenset简析

Stata小贴士之外部命令安装路径

有一种夏天叫做宫崎骏的夏天

换装术|多个Excel文件如何一键转为dta格式

【基础篇】Python可变对象与不可变对象

Stata绘图系列——细节掌控绘图区域!

 4月A股的收官战之概念板块哪家强?

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存