【问题标题】:Read headers (only) of a large CSV file in (browser) javascript在(浏览器)javascript中读取大型CSV文件的标题(仅)
【发布时间】:2019-04-05 08:53:14
【问题描述】:

我正在尝试使用 Javascript 读取存储在 AWS S3 上的大文件的 CSV 标头。我想知道是否有一种方法可以只读取标题而不读取整个文件。

我尝试过使用 d3.csv 和 http.get,但它们都加载了整个文件。有什么建议吗?

【问题讨论】:

  • 如果您想阅读列的标题,而不是其中的数据(根据我从您的问题中了解到的,说实话,这是误导),请知道您不会能够在客户端这样做。由于您必须请求文件来处理它,这意味着它将通过网络请求整个文件,我相信您不希望发生这种情况。相反,您应该在 AWS 上编写一个脚本(我不熟悉它,所以我无能为力)来做到这一点。既然你知道了,我建议你为你的问题使用正确的标签!
  • 同意我正在寻找 csv 文件的列而不是请求标头。@trichetriche 我认为您的解释是有道理的,我可能不得不走下服务器脚本路线。这一定是通病,想知道有没有其他办法

标签: javascript angular csv http


【解决方案1】:

我相信您可以在标头请求中使用范围字节来读取部分文件

S3 Docs 范围:字节=0-12000

EDITED 工作示例。

fetch("https://s3.amazonaws.com/aml-sample-data/banking.csv", {
   headers: {
    'content-type': 'multipart/byteranges',
    'range': 'bytes=0-512'
   },
  })
.then(response => {
    var reader = response.body.getReader().read().then(data => {
  var binArray = data.value;
  var str = "";
  for (var i = 0; i < binArray.length; i++) {
    str += String.fromCharCode(parseInt(binArray[i]));
  }

   var result = str.search(/\n/);
   if (result > -1) {
   var header = str.substring(0, result);
   console.log('found' , header);

     return response.text();

  } else {
return response.text();
  }

    });

})
.then(response => {
    var result = response.search(/\n/);
    if (result > -1) {
  var header = response.substring(0, result);
  console.log('from last request', header);
    }
});   

测试时不要忘记在 Chrome 浏览器中关闭 cors 检查

chrome.exe  --disable-site-isolation-trials --disable-web-security --user- 
data-dir="D:\temp"

【讨论】:

  • 那不是意味着他必须知道行的确切长度吗?
  • 是的,他需要继续拉取字节范围,直到达到"\n" 的偏移量
  • 这听起来不太实用……相反,他可以使用像head 这样的Linux 命令来获取第一行,并将其回显到文件中?
  • 是的,您可以通过多种方式做到这一点,但他使用的是对 S3 存储的 HTTP 请求,我不知道他是否可以运行远程 shell 命令 S3
猜你喜欢
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
相关资源
最近更新 更多