如果数据的格式略有损坏,是否仍然可以确定其文件类型
If the format of a data is slightly broken, is it still possible to determine its filetype?
我有一个随机的文本数据,我需要确定它的文件类型,例如.xls,.csv,.tsv,.json和.html。目前,我正在使用蛮力针对所有不同的格式解析文件。
当文件略有损坏时,会出现我的问题,并且在解析过程中会失败。在这些情况下,是否有一个相当好的启发式方法可以猜测文件类型,以便我可以根据这种格式进一步"lint"数据?
我正在使用node.js,以防已经有一个库。我对node.js之外的解决方案持开放态度。
我尝试使用 mmmagic,但它只返回"text/plain",而不是我需要的信息(.tsv、.json、.xml),livescript 中的示例代码:
useMagic = (res)->
buf = new Buffer res.body
magic = new mmmagic.Magic! ##return UTF-8 Unicode text, with very long lines, with no line terminators
#magic = new mmmagic.Magic mmmagic.MAGIC_MIME ## return text/plain; charset=utf-8
#magic = new mmmagic.Magic mmmagic.MAGIC_MIME_TYPE ##text/plain
err, magicalres <- magic.detect buf
magicalres |> console.log
url = "https://sheethub.com/data.fda.gov.tw/%E4%B8%8D%E7%AC%A6%E5%90%88%E9%A3%9F%E5%93%81%E8%B3%87%E8%A8%8A%E8%B3%87%E6%96%99%E9%9B%86/i/96/%E7%B3%AF%E7%B1%B3?page=1&format=json"
err, res, body <- request {"url": url, "encoding": null}
result = res |> useMagic
我正在添加编译的javascript代码,也许这会更容易:
request = require('request');
mmmagic = require('mmmagic');
useMagic = function(res){
var buf, magic;
buf = new Buffer(res.body);
magic = new mmmagic.Magic();
return magic.detect(buf, function(err, magicalres){
return console.log(
magicalres);
});
};
url = "https://sheethub.com/data.fda.gov.tw/%E4%B8%8D%E7%AC%A6%E5%90%88%E9%A3%9F%E5%93%81%E8%B3%87%E8%A8%8A%E8%B3%87%E6%96%99%E9%9B%86/i/96/%E7%B3%AF%E7%B1%B3?page=1&format=json";
request({
"url": url,
"encoding": null
}, function(err, res, body){
var result;
return result = useMagic(
res);
});
我一直在使用包括res.headers['content-type']
在内的方法组合,但仍然存在所有方法都失败的情况。
你厌倦了提供与libmagic绑定的mmmagic模块吗?
它允许检查文件中已知的"魔术"标识符。通常,它只需要访问文件的前几个字节即可执行此操作。
我想这种方法本身可能被认为是"蛮力",但至少它依赖于一个众所周知且经过良好测试的库。
在最初建议mmmagic未能提供魔法后更新:
如果您始终使用请求模块通过 HTTP(S) 请求数据,则响应标头可能会提供提示:
// returns 'text/json' for your data.fda.gov.tw sample
var mimeType = res.headers['content-type'];
如果做不到这一点,fsql Perl 模块包含基于正则表达式的逻辑,用于确定文本是否是 CSV、TSV、YAML 或 JSON,这些文本可能适合在您自己的代码中重新调整用途。
相关文章:
- 输入类型文件的未捕获类型错误
- 输入类型=文件验证停止其他输入类型验证
- 如何显示在输入类型文件中选择的文件
- 如何使按钮作为输入类型文件
- 可以设置输入类型=文件的文本框的高度
- 在 Angular2 中构建多部分/表单数据 POST 请求并验证输入类型文件
- 如何在jQuery中处理输入类型=文件的onchange事件
- 如何javascript验证<输入类型=文件多个>如果浏览器不支持多个
- 如何将文本上载为具有输入类型文件的表单中的文本文件
- 具有输入类型文件字段的语义UI重置表单
- 用于获取<输入类型=文件>只返回firefox中的文件名
- 输入类型文件-如何访问文件属性
- 输入类型文件将文件路径添加到范围
- 从输入类型文件中获取值
- 从输入[类型=文件]缩放图像
- 带有 javascript 的样式输入类型文件
- Ionic + Cordova InappBrowser - 输入类型=文件不起作用
- 如何设置视频文件的预览,从输入类型='文件'中选择
- 输入类型=“文件”在 Jquery 中使用链接
- 输入类型文件未正确将图像放入图像标签