为什么我的 CSV 文件上的 from_line 和 to from csv-parse 没有读取预期的行数?

Why is from_line and to from csv-parse on my CSV file not reading the expected amount of rows?

提问人:ValkyrieOnAPegasus 提问时间:6/8/2023 更新时间:6/8/2023 访问量:31

问:

我正在尝试读取一个如此大的 .csv 文件,以至于将其全部保存在一个变量中会超出内存。因此,我想一次只处理 .csv 文件的一部分。我正在阅读 CSV 解析选项,发现它从请求的行号开始,它将处理请求的记录数。我想如果我设置了一次要处理多少条记录,我可以从第一条记录开始,然后添加已处理的行数,这样下一个循环的开始将从第一个未处理的行开始,依此类推。from_lineto

但是,当我运行代码时,实际读取的行数不是我设置的行数,并且每个循环中处理的行数是不同的。有时它只有 3 行。有时只处理 63 行。两者都小于我设置的行数。此外,所有行的总和与 中的内容不匹配。CSV 文件。有时它更多(是任何记录的两倍),有时它更少(记录的一半),具体取决于我设置的内容。有人能看到为什么我没有得到正确的行数吗?tototo

   import { parse } from 'csv-parse';

   function main(){
       let dataList = [{}];
       let startLine = 2
       const numRows = 500;

       while( dataList.length != 0){
            const data = await this.getCSVData(startLine, numRows);
           //function to process the rows
            
            dataList = data;
            startLine += numRows;
        }
    }

     async function readCSVFile(filePath: string, fromLine, toLine): Promise<object[]> {
        const results: object[] = [];       
        const parseOptions = {from_line: fromLine, to: toLine}
        return new Promise((resolve, reject) => {
          fs.createReadStream(filePath)
            .pipe(parse(parseOptions))
            .on('data', (data) => {
                results.push(data)
            })
            .on('end', () => resolve(results))
            .on('error', (error) => reject(error));
        });
    }
    
    async function getCSVData(startLine, numRows){
            try{
                return await this.readCSVFile("fileName.csv", startLine, numRows);
            }
            catch(error) {
                console.error(error);
            };
    }

节点.js TypeScript CSV 解析

评论


答: 暂无答案