我可以使用apps脚本在Google云端硬盘中解压缩文件吗?
这是一个后续this thread。我可以使用apps脚本在Google云端硬盘中解压缩文件吗?
我试图使用由@July.Tech没有提供的代码,但我不断收到未知的压缩方法错误或不正确头检查错误。当使用两种不同的gzip方法创建压缩文件时出现错误,所以我认为该文件被正确地压缩。
有什么建议吗? (我的输入文件gzip压缩的,所以我不能用Utilities.unzip()。)
这里是整个代码:
reports_folder_id = 'xxxxx'; //id of folder where gzipped csv reports are saved
report_name = 'xxxxxx.gz'; // name of gzipped CSV file
function importData() {
var fSource = DriveApp.getFolderById(reports_folder_id);
var fi = fSource.getFilesByName(report_name); // latest report file
eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js').getContentText());
if (fi.hasNext()) { // proceed if report_name file exists in the reports folder
var file = fi.next();
var charData = file.getBlob().getDataAsString(); // same error if .getBytes() is used
var binData = [];
for (var i = 0; i < charData.length; i++) {
binData.push(charData[i] < 0 ? charData[i] + 256 : charData[i]);
}
var data = pako.ungzip(binData); // I get same error for pako.inflate(binData);
var decoded = '';
for (var i = 0; i < data.length; i++) {
decoded += String.fromCharCode(data[i]);
}
}
}
如果没有建议用于固定上述情况,就如何ungzip一个GDrive的任何想法文件编程?
谢谢。
你需要找出是否PAKO支持gzip压缩。如果没有,你应该寻找另一个支持gzip的压缩包。
pako应该支持gzip(https://nodeca.github.io/pako/#gzip),但代码不起作用。任何具体的建议,以解决我的代码或使用不同的包?谢谢。 –
运行提供的示例代码确实导致未知的压缩方法错误在我的良好环境。
尝试改变
var charData = file.getBlob().getDataAsString(); // same error if .getBytes() is used
要
var charData = file.getBlob().getBytes();
所以这是
function myFunction() {
reports_folder_id = '<FOLDER_ID>';
report_name = 'zip3.csv.gz'; // name of gzipped CSV file
var fSource = DriveApp.getFolderById(reports_folder_id);
var fi = fSource.getFilesByName(report_name);
eval(UrlFetchApp.fetch('https://cdn.rawgit.com/nodeca/pako/master/dist/pako.js').getContentText());
if (fi.hasNext()) {
var file = fi.next();
var blobData = file.getBlob();
var charData = blobData.getBytes();
var binData = [];
for (var i = 0; i < charData.length; i++) {
binData.push(charData[i] < 0 ? charData[i] + 256 : charData[i]);
}
var data = pako.inflate(binData);
var decoded = '';
for (var i = 0; i < data.length; i++) {
decoded += String.fromCharCode(data[i]);
}
Logger.log(decoded);
}
}
尝试在你原来的 “GlicemiaMisurazioni.csv.gz” 文件的一个子集运行此脚本: https://drive.google.com/file/d/0B8geUNXmd4J2YzJoemFLMnBTbVU/view?usp=sharing
(我截断原来的CSV到32行加快测试的缘故执行 - 原来花费太长时间运行)
检查日志显示,解压缩工作:
4;02/07/2017 03.00.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.59.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.58.30;;;159.0;159.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.57.30;;;159.0;159.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.56.30;;;158.0;158.0;1;0M0000UMQ5D;;;0;;
4;02/07/2017 02.56.00;;;;;0;;0.4;Novorapid ;0;Left flank;Test
不幸的是,使用.getBytes()时仍然会出现“不正确的标题检查”错误。我试了一下我的原始输入文件:https://drive.google.com/file/d/0B2wwGDRmRP3JR1Q5ZHZHZ1gzUUk/view?usp=sharing,也是我使用的总指挥官给gzip 2MB的CSV(https://drive.google。 com/file/d/0B6XAMITJOyxSUUpyZGJxdkxpY2s/view?usp = sharing),并尝试使用相同的错误。 –
我编辑了一个工作示例的答案,请检查这次是否有效。 –
了不起的消息。感谢分享。 –