我可以使用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的任何想法文件编程?

谢谢。

作为2018 1月19日(see release notes)应用脚本现在支持访问gzip压缩使用以下方法Utilities

+0

了不起的消息。感谢分享。 –

你需要找出是否PAKO支持gzip压缩。如果没有,你应该寻找另一个支持gzip的压缩包。

+0

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 
+0

不幸的是,使用.getBytes()时仍然会出现“不正确的标题检查”错误。我试了一下我的原始输入文件:https://drive.google.com/file/d/0B2wwGDRmRP3JR1Q5ZHZHZ1gzUUk/view?usp=sharing,也是我使用的总指挥官给gzip 2MB的CSV(https://drive.google。 com/file/d/0B6XAMITJOyxSUUpyZGJxdkxpY2s/view?usp = sharing),并尝试使用相同的错误。 –

+0

我编辑了一个工作示例的答案,请检查这次是否有效。 –