语境
我收到了大约 1700 个 97-2003 excel 文件,其中包含大量数据,包括一些文本信息。在清理并运行一些统计分析之前,我试图将它们全部读入 Stata。但是,Stata 无法打开它们。这些文件具有 .xls 格式,其中包含我想要保留的大量文本,并将它们转换为 .csv 文件(因此是 csv 标记)。
我试过的
- 仔细一看,每次我在 Excel 中手动打开文件时,都会出现错误“格式与扩展名不匹配”,我必须单击“仍然打开”并手动保存,然后才能将文件导入 Stata。我不可能对 1700 个文件执行此操作。我使用的是 Windows 操作系统,所有文件都本地保存在我的驱动器上。
我还尝试在 stata 上编写大量代码,以将所有文件保存为 csv 或至少一个可以导入 stata 的 xls,但我的运气为零。每次我尝试保存它们时,我都会收到一个损坏的 csv 或一个带有完全相同的错误的 xls,当我手动尝试打开文件时,在 stata 上弹出“尝试 xlCreateBook()”和“格式与扩展名不匹配”错误.
作为参考,下面是我写的stata代码。
cd "$dropbox\project8\data\2008-2009\A.Monthwise\dakota"
local oldfiles : dir "." files "*.xls" , respectcase
mac list _oldfiles
foreach fn of local oldfiles {
local oldfn `"`fn'"'
local res = ustrregexm(`"`oldfn'"', "_(.*)\.xls", .)
if `res'==1 {
local newfn = "new_" + ustrregexs(1) + ".dta"
di `"Renaming `oldfn' to `newfn'"'
copy `"./`oldfn'"' `"./new/`newfn'"', public
}
}
问题
有没有办法可以解决 1700 个文件的扩展/格式问题并批量转换所有内容,以便 Stata 可以读取它?
错误“格式与扩展名不匹配”意味着文件不是真正的
.xls
. 由于 Excel 仍然可以打开它们,它们可能是受支持的另一种格式。我的猜测是.xlsx
。您可以使用十六进制编辑器(例如 HxD)来检查文件签名,它位于前几个字节中:
xlsx
: 前 4 个字节是50 4B 03 04
xls
: 前 8 个字节是D0 CF 11 E0 A1 B1 1A E1
要一次重命名当前文件夹中的所有文件,您可以使用命令提示符 (CMD) 和以下命令:
如果您的文件签名不是上述之一,请将其添加到您的帖子中。它将有助于识别这些文件。
由于文件是 HTML,而不是 xsl 甚至 xslx,因此可以使用 VBA 在 Excel 中进行批量转换。
文章 如何在 Excel 中将多个 xls 文件转换为 xlsx 文件? 包含适用于海报的此脚本:
由于这些文件似乎是 HTML 文件(在我看来是一种存储数据的狂野方式),您可以研究可以抓取/解析网页的方法。
斯塔塔
我没有可玩的 Stata,但发现该
readhtml
软件包具有readhtmltable
似乎可以读取网页上的表格的功能(不确定它是否可以处理本地 HTML 文件)。Python
或者,我确实可以访问 Python 和
pandas
,它有一个read_html
方法。我用你上传的文件F - A & N Islands_September.xls
试了一下,效果很好。为此,您需要在 python 环境中使用
lxml
和包。pandas
要将文件批量转换为 CSV,您可以执行以下操作: