Hướng dẫn javascript read last line of text file - javascript đọc dòng cuối cùng của tệp văn bản

Tôi đang viết một chương trình javascpript để đọc dữ liệu từ tệp CSV và đặt nó theo các biến, để cuối cùng được hiển thị trong HTML. Tệp này sẽ được thêm vào cuối tệp bởi một chương trình khác. Tôi chỉ muốn đọc trong dòng cuối cùng.

Ví dụ Dữ liệu: Ngày, Data1, Data2, Data3

Tôi đã tìm thấy mã khác để đọc trong một giá trị từ dòng cuối cùng ... Đọc dòng cuối cùng của tệp CSV và trích xuất một giá trị

Tôi có thể xóa cái này khỏi mã đó không:

var fields = lastLine.split(',');
var audioFile = fields.slice(-1)[0].replace('file:\\\\', '')

Thanks!

Đây là một ví dụ về mã về những gì tôi sẽ sử dụng:





This is the Date.


This is the Data1.


This is the Data2.


This is the Data3.


1.8.0 & nbsp; • & nbsp; public & nbsp; • & nbsp; xuất bản 2 năm trướcPublic • Published 2 years ago

  • Readme
  • Khám phá BetaBETA
  • 1 phụ thuộc
  • 93 người phụ thuộc
  • 18 phiên bản

Đọc các dòng N cuối cùng

Đọc trong n dòng cuối cùng của một tệp một cách hiệu quả bằng cách sử dụng node.js và fs.

Cài đặt

npm install read-last-lines --save

Cách sử dụng

Ví dụ đọc 50 dòng cuối cùng của một tệp

const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));

Đóng góp

  1. Fork It on GitHub https://github.com/alexbbt/read-srast-rines
  2. Tạo nhánh tính năng của bạn:
    
    
    
    
    

    This is the Date.


    This is the Data1.


    This is the Data2.


    This is the Data3.


    2
  3. Cam kết thay đổi của bạn:
    
    
    
    
    

    This is the Date.


    This is the Data1.


    This is the Data2.


    This is the Data3.


    3
  4. Đẩy đến chi nhánh:
    
    
    
    
    

    This is the Date.


    This is the Data1.


    This is the Data2.


    This is the Data3.


    4
  5. Gửi yêu cầu kéo theo chi nhánh phát triển: D

Có nhiều cách để đọc một dòng tệp từng dòng với Node.js. Trong các tệp Node.js có thể được đọc theo cách đồng bộ hoặc theo cách không đồng bộ. Với đường dẫn Async, có thể đọc các tệp lớn mà không tải tất cả nội dung của tệp vào bộ nhớ.

Đọc toàn bộ tệp cùng một lúc sẽ làm cho bộ nhớ quá trình trở nên chuyên sâu. Với khả năng tải và đọc từng dòng tệp, nó cho phép chúng tôi dừng quy trình ở bất kỳ bước nào theo nhu cầu. Trong bài đăng này, chúng tôi sẽ xem xét 3 cách để đọc một dòng từng dòng bằng Node.js với so sánh sử dụng bộ nhớ.

Hướng dẫn javascript read last line of text file - javascript đọc dòng cuối cùng của tệp văn bản

Mục lục #

  • Điều kiện tiên quyết
  • Các tập tin kiểm tra
  • Đọc tệp đồng bộ hóa
  • Đọc
  • N-readlines
  • Người đọc dòng
  • Sự lựa chọn khác
  • So sánh nhanh
  • Sự kết luận

Điều kiện tiên quyết #

Trước khi nhảy vào mã, bên dưới là một số điều kiện tiên quyết để theo dõi cùng với các ví dụ mã được cung cấp:

  1. Có Node.js 10+ (tốt nhất là Node LTS 16 mới nhất) đang chạy trên môi trường máy/thử nghiệm của bạn. Bạn thậm chí có thể sử dụng Node.js trên Docker cho nó.
  2. Kiến thức về cách cài đặt các mô -đun NPM sẽ là cần thiết.
  3. Bất kỳ sự hiểu biết trước đây về các luồng và cách chúng hoạt động sẽ hữu ích.
  4. Bất kỳ kiến ​​thức nào về kiến ​​trúc dựa trên sự kiện của Node sẽ tốt.

Tôi đang chạy mã trên máy Mac với Node.js 14. Trong phần sau, chúng tôi sẽ xem xét tệp chúng tôi sẽ sử dụng để đọc từng dòng với Node.js. Các ví dụ mã có sẵn trong kho lưu trữ GitHub công khai để thuận tiện cho bạn.

Tệp kiểm tra #

Đối với tất cả các đường mòn bên dưới, chúng tôi sẽ sử dụng tệp kết xuất SQL 90 MB mà tôi đã lấy từ kho lưu trữ bản sao BroadbandNow này. Tệp tương tự được sử dụng cho từng phương thức đọc dòng tệp theo dòng trong node.js để giữ cho bài kiểm tra nhất quán trên các phương thức. Chúng tôi cũng sẽ xem xét mức tiêu thụ bộ nhớ và thời gian đọc tệp 90 MB có 798148 dòng văn bản. Đây phải là một thử nghiệm tốt để xem xét cách những cách này thực hiện cho một tệp tương đối lớn.

Đọc tệp đồng bộ hóa #

Chúng ta có thể có thể đọc tệp theo cách đồng bộ, có nghĩa là tải toàn bộ tệp 90 MB trong bộ nhớ và lặp qua nó. Nhưng, vì chúng tôi sẽ tải toàn bộ tệp trước khi đọc bất kỳ dòng nào từ đó, mức tiêu thụ bộ nhớ chắc chắn sẽ hơn 90 MB. Dưới đây là một ví dụ nhanh để đọc từng dòng tệp nhưng theo cách đồng bộ hóa không thực hiện rất nhiều:

const fs = require('fs');

const allFileContents = fs.readFileSync('broadband.sql', 'utf-8');
allFileContents.split(/\r?\n/).forEach(line => {
console.log(`Line from file: ${line}`);
});
const used = process.memoryUsage().heapUsed / 1024 / 1024;
console.log(`The script uses approximately ${Math.round(used * 100) / 100} MB`);

Vì chúng tôi đang sử dụng mô -đun





This is the Date.


This is the Data1.


This is the Data2.


This is the Data3.


5 là bản gốc, nên không cần phải cài đặt bất kỳ mô -đun NPM mới nào. Trong mã trên, chúng tôi đang đọc tệp trong khi đồng bộ sau đó lặp qua từng dòng một và in nó vào bảng điều khiển với




This is the Date.


This is the Data1.


This is the Data2.


This is the Data3.


6.

Sau khi vòng lặp được thực hiện, chúng tôi in ra cách sử dụng bộ nhớ gần đúng. Mã này có thể được tìm thấy trong yêu cầu kéo này cho tài liệu tham khảo của bạn. Nếu chúng ta chạy tập lệnh này với tiền tố thời gian như dưới đây:

node readfilesync.js

Nó sẽ chạy và kết thúc với đầu ra như sau:

Hướng dẫn javascript read last line of text file - javascript đọc dòng cuối cùng của tệp văn bản

Như mong đợi đối với một tệp 90 MB, bộ nhớ mất ~ 225 MB và mất 7,85 giây để nó lặp qua các dòng văn bản 798K.

Nếu có một tệp 1 GB, không nên sử dụng phương thức này vì nó sẽ ra khỏi bộ nhớ khi cố gắng tải toàn bộ tệp vào bộ nhớ.

Tiếp theo, chúng ta sẽ xem xét một cách đọc ASync hiệu suất hơn theo từng dòng với





This is the Date.


This is the Data1.


This is the Data2.


This is the Data3.


7 và một luồng là một mô -đun Node.js gốc khác.

ĐỌC ĐỌC #

Readline là một mô -đun Node.js gốc để không cần phải cài đặt mô -đun NPM mới để sử dụng nó. Nó có thể được sử dụng để đọc các tệp từng dòng bằng cách đọc một dòng tại một thời điểm từ bất kỳ luồng có thể đọc nào. Chúng tôi sẽ sử dụng phương thức ON với sự kiện





This is the Date.


This is the Data1.


This is the Data2.


This is the Data3.


8 được phát ra khi luồng đầu vào nhận được đầu vào cuối cùng




This is the Date.


This is the Data1.


This is the Data2.


This is the Data3.


9 hoặc
npm install read-last-lines --save
0.

Dưới đây là ví dụ mã của READLINE với luồng có thể đọc được:

const events = require('events');
const fs = require('fs');
const readline = require('readline');

(async function processLineByLine() {
try {
const rl = readline.createInterface({
input: fs.createReadStream('broadband.sql'),
crlfDelay: Infinity
});

rl.on('line', (line) => {
console.log(`Line from file: ${line}`);
});

await events.once(rl, 'close');

console.log('Reading file line by line with readline done.');
const used = process.memoryUsage().heapUsed / 1024 / 1024;
console.log(`The script uses approximately ${Math.round(used * 100) / 100} MB`);
} catch (err) {
console.error(err);
}
})();

Hãy để hiểu những gì đang diễn ra trong kịch bản trên. Đầu tiên chúng tôi yêu cầu 3 sự kiện mô -đun Node.js gốc, FS và Readline. Sau đó, chúng tôi xác định chức năng Async được gọi là

npm install read-last-lines --save
1 tạo ra giao diện để đọc trong đó đầu vào là READSTRAM nơi chúng tôi vượt qua tệp kiểm tra 90 MB của chúng tôi. Theo các tùy chọn giao diện Tạo, crlfdelay được đặt thành Infinity sẽ xem xét
npm install read-last-lines --save
2 theo sau là
npm install read-last-lines --save
3 như một dòng mới.

Khi chúng tôi đang tương tác với một luồng có thể đọc được, trên mỗi sự kiện đọc dòng, nó sẽ gọi hàm

npm install read-last-lines --save
4 với sự kiện




This is the Date.


This is the Data1.


This is the Data2.


This is the Data3.


8. Tại thời điểm đó, chúng tôi đăng nhập các nội dung của dòng đọc từ luồng. Sau đó, chúng tôi lắng nghe sự kiện Đóng tuyến Readline với
npm install read-last-lines --save
6 tạo ra một lời hứa sẽ giải quyết với một loạt tất cả các đối số phát ra cho sự kiện đã cho. Nó sẽ là một mảng trống trong trường hợp này.

Cuối cùng, chúng tôi đọc cách sử dụng bộ nhớ và đăng nhập nó. Bạn có thể tham khảo mã trên trong yêu cầu kéo này. Khi chúng tôi chạy tập lệnh này với:

node readline.js

Nó mang lại đầu ra sau:

Hướng dẫn javascript read last line of text file - javascript đọc dòng cuối cùng của tệp văn bản

Như đã thấy ở trên, mô -đun Readline với luồng có thể đọc được chỉ mất 6,33 MB bộ nhớ để đọc tệp 90 MB.

Vì nó đã được phát trực tuyến, ít hơn 225 MB trong ví dụ đồng bộ hóa trước đó.

Nó đã hoàn thành quá trình trong 7,365 giây. Tiếp theo, chúng tôi sẽ xem xét mô-đun NPM N-readlines để đọc từng dòng tệp.

N-wreadlines #

N-readline là một mô-đun NPM sẽ đọc từng dòng tệp mà không cần đệm toàn bộ tệp trong bộ nhớ. Nó thực hiện điều này mà không cần sử dụng các luồng bằng cách đọc nội dung tệp trong các khối bằng cách sử dụng bộ đệm và mô -đun hệ thống tệp gốc. Mặc dù nó hoạt động theo cách đồng bộ, nó không tải toàn bộ tệp trong bộ nhớ.

Dưới đây là một ví dụ về cách sử dụng N-readline để đọc từng dòng tệp sau khi cài đặt nó bằng

npm install read-last-lines --save
7:

const nReadlines = require('n-readlines');
const broadbandLines = new nReadlines('broadband.sql');

let line;
let lineNumber = 1;

while (line = broadbandLines.next()) {
console.log(`Line ${lineNumber} has: ${line.toString('ascii')}`);
lineNumber++;
}

console.log('end of file.');
const used = process.memoryUsage().heapUsed / 1024 / 1024;
console.log(`The script uses approximately ${Math.round(used * 100) / 100} MB`);

Trong mã trên, trước tiên, chúng tôi yêu cầu mô -đun

npm install read-last-lines --save
8 và chúng tôi khởi tạo nó bằng tệp
npm install read-last-lines --save
9 của chúng tôi là 90 mbs. Các tùy chọn khác như
const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));
0 và
const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));
1 có thể được truyền dưới dạng tham số thứ hai trong
const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));
2 nhưng chúng tôi đi với mặc định.

Do đó, chúng tôi xác định hai biến





This is the Date.


This is the Data1.


This is the Data2.


This is the Data3.


8 và
const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));
4. Biến dòng sẽ giữ chuỗi cho mỗi dòng của tệp và
const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));
4 sẽ giữ số dòng từ 1 đến số dòng mà tệp có.

Sau đó, chúng tôi lặp qua các dòng trong khi có các dòng trong tệp có cuộc gọi

const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));
6. Khi nó trả về một bộ đệm nếu một dòng tồn tại, chúng tôi đã đăng nhập nó vào CLI sau khi chuyển đổi nó thành chuỗi ASCII. Tiếp theo, chúng tôi tăng số dòng bên trong vòng lặp.

Cuối cùng, chúng tôi in

const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));
7 và giống như các ví dụ trên cũng in ra mức sử dụng bộ nhớ gần đúng. Mã này cũng có sẵn dưới dạng yêu cầu kéo cho tài liệu tham khảo của bạn. Chúng ta có thể thực thi tập lệnh trên với:

node n-readlines.js

Nó sẽ hiển thị đầu ra sau cho đến cuối tập lệnh:

Hướng dẫn javascript read last line of text file - javascript đọc dòng cuối cùng của tệp văn bản

Như đã thấy ở trên, nó đã có nhiệm vụ được thực hiện trong 8,9 giây.

Để in tất cả các dòng 798K của tệp SQL 90 MB, N-wreadlines chỉ tiêu thụ bộ nhớ 4,11 MB thật tuyệt vời.

Trong phần sau, chúng ta sẽ thấy mô -đun NPM đầu đọc dòng như thế nào để đọc các tệp theo dòng với node.js.

Trình đọc dòng #

Mô-đun NPM đầu đọc dòng tự xác định chính nó là trình đọc tệp/luồng không đồng bộ, được đệm, theo từng dòng với sự hỗ trợ cho các bộ phân cách dòng do người dùng xác định. Trên trang GitHub của nó. Trong phần sử dụng của trang, nó cũng đề cập rằng hàm

const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));
8 đọc từng dòng của tệp đã cho. Biến
const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));
9 trong cuộc gọi lại có thể được sử dụng để xác định xem dòng cuối cùng của tệp có đạt được không.

Dưới đây là ví dụ hoạt động của việc đọc tệp SQL 90 MB tương đối lớn của chúng tôi với trình đọc dòng, chúng tôi đã cài đặt nó với

const fs = require('fs');

const allFileContents = fs.readFileSync('broadband.sql', 'utf-8');
allFileContents.split(/\r?\n/).forEach(line => {
console.log(`Line from file: ${line}`);
});
const used = process.memoryUsage().heapUsed / 1024 / 1024;
console.log(`The script uses approximately ${Math.round(used * 100) / 100} MB`);

0 và sau đó tạo tệp sau:





This is the Date.


This is the Data1.


This is the Data2.


This is the Data3.


0

Đầu tiên, chúng tôi yêu cầu mô -đun đầu đọc dòng sau đó gọi hàm

const readLastLines = require('read-last-lines');
readLastLines.read('path/to/file', 50)
	.then((lines) => console.log(lines));
8 chuyển tên tệp (hoặc đường dẫn tệp) là tham số đầu tiên. Tham số thứ hai là hàm gọi lại có dòng và các biến cuối cùng. Sau đó, chúng tôi đăng nhập dòng từ tệp có sẵn trong biến dòng.

Tiếp theo, nếu chúng tôi tìm thấy biến cuối cùng là đúng, cho biết chúng tôi đã đạt đến cuối tệp, chúng tôi đăng nhập thông báo

const fs = require('fs');

const allFileContents = fs.readFileSync('broadband.sql', 'utf-8');
allFileContents.split(/\r?\n/).forEach(line => {
console.log(`Line from file: ${line}`);
});
const used = process.memoryUsage().heapUsed / 1024 / 1024;
console.log(`The script uses approximately ${Math.round(used * 100) / 100} MB`);

2 và cũng in ra bộ nhớ gần đúng được sử dụng để đọc từng dòng tệp. Mã này cũng có sẵn dưới dạng yêu cầu kéo cho tài liệu tham khảo của bạn.

Chúng ta có thể chạy mã này bằng cách thực thi:





This is the Date.


This is the Data1.


This is the Data2.


This is the Data3.


1

Nó sẽ kết thúc với một đầu ra trông giống như sau:

Hướng dẫn javascript read last line of text file - javascript đọc dòng cuối cùng của tệp văn bản

Như đã thấy ở trên kịch bản kết thúc trong 10,66 giây.

So với bộ nhớ 225 MB được sử dụng trong

const fs = require('fs');

const allFileContents = fs.readFileSync('broadband.sql', 'utf-8');
allFileContents.split(/\r?\n/).forEach(line => {
console.log(`Line from file: ${line}`);
});
const used = process.memoryUsage().heapUsed / 1024 / 1024;
console.log(`The script uses approximately ${Math.round(used * 100) / 100} MB`);

3, đọc một tệp 90 MB với trình đọc dòng chỉ mất 5,18 MB bộ nhớ thấp hơn 45 lần.

Nếu bạn muốn khởi động lại tập lệnh Node.js của mình trên mỗi thay đổi, hãy thử Nodemon. Tiếp theo, chúng tôi sẽ xem nếu có các lựa chọn khác nhưng chúng tôi chắc chắn đã đề cập đến 3 cái phổ biến nhất.

Sự lựa chọn khác #

Có các tùy chọn khác để đọc từng dòng tệp với Node.js. Có một mô -đun NPM rất phổ biến có tên Readline nhưng do sự va chạm tên với mô -đun Node.js gốc, nó đã được đổi tên thành từng dòng ngay bây giờ. Nó hoạt động rất giống với mô -đun Readline gốc.

Các tùy chọn ít phổ biến khác nhưng có sẵn là, File Readline và Readines-ng. Cả hai đều là các mô -đun NPM nhưng chúng đã được tải xuống khoảng 3 lần mỗi tuần trước.

Để xử lý thêm nội dung tệp, sử dụng các hàm mảng JavaScript này sẽ rất hữu ích. Điều này đưa chúng ta đến một so sánh nhanh chóng về các tùy chọn có sẵn này.

So sánh nhanh #

Một so sánh nhanh chóng về bốn mô-đun NPM này trên các xu hướng NPM cho thấy N-wreadlines là một mô-đun tải xuống nhiều nhất với 56K tải xuống trong tuần trước. Cái thứ hai là trình đọc dòng với 46K tải xuống tuần trước nhưng hãy nhớ rằng trình đọc dòng đã được cập nhật lần cuối 6 năm trước. Dưới đây là ảnh chụp nhanh các tải xuống trong 1 năm qua:

Hướng dẫn javascript read last line of text file - javascript đọc dòng cuối cùng của tệp văn bản

Sẽ tốt hơn nếu chọn những cái phổ biến và cái được cập nhật gần đây nhất là N-Readlines, một năm trước.

Các bản tải xuống cho cả dòng Readline và Readlines Ng lần lượt là khoảng 3 mỗi tuần so với 46K và 56K đối với trình đọc dòng và dòng N-đọc sách tương ứng.

Thực hiện một lựa chọn sáng suốt để được hỗ trợ tốt hơn nếu bạn cần nó.

Về bộ nhớ và sử dụng CPU, tất cả các phương thức ngoại trừ

const fs = require('fs');

const allFileContents = fs.readFileSync('broadband.sql', 'utf-8');
allFileContents.split(/\r?\n/).forEach(line => {
console.log(`Line from file: ${line}`);
});
const used = process.memoryUsage().heapUsed / 1024 / 1024;
console.log(`The script uses approximately ${Math.round(used * 100) / 100} MB`);

4 đầu tiên, tất cả các tùy chọn dựa trên luồng hoặc gọi lại khác được tiêu thụ dưới 10 MB hoặc ghi nhớ và kết thúc trước 10 giây với mức sử dụng CPU 70-94%. Đọc tệp đồng bộ hóa tiêu thụ 225 MB bộ nhớ cho tệp 90 MB.

Sự kết luận #

Chúng tôi đã xem cách đọc một dòng tệp từng dòng trong node.js. Mặc dù có vẻ như là một vấn đề tầm thường, có nhiều cách để thực hiện nó trong node.js giống như hầu hết mọi thứ trong javascript.

Chúng tôi cũng đã phân tích việc sử dụng bộ nhớ và thời gian cho mỗi trong số 3 phương pháp.

Cuối cùng, chúng tôi đã xem xét một so sánh nhanh chóng về các tùy chọn này và các tùy chọn khác có sẵn về mức độ phổ biến. Tôi hy vọng nó sẽ giúp bạn đưa ra quyết định có sáng suốt khi đọc một dòng tệp theo dòng với Node.js.

Làm cách nào để đọc dòng cuối cùng của một tệp trong Node JS?

Phương pháp 1: Sử dụng mô -đun Readline: Readline là mô -đun gốc của nút. JS, nó được phát triển cụ thể để đọc dòng nội dung từng dòng từ bất kỳ luồng có thể đọc nào. Nó có thể được sử dụng để đọc dữ liệu từ dòng lệnh. const readline = yêu cầu ('readline');Using the Readline Module: Readline is a native module of Node. js, it was developed specifically for reading the content line by line from any readable stream. It can be used to read data from the command line. const readline = require('readline');

Làm cách nào để đọc một dòng tệp văn bản từng dòng trong nút js?

Đây là cách dễ nhất để đọc các dòng từ một tệp, không có bất kỳ mô -đun bên ngoài nào: const fs = yêu cầu ('fs');const readline = yêu cầu ('readline');Async Chức năng ProcessLineByline () {const fileStream = fs.createLeadStream ('input.txt');const rl = readline.const fs = require('fs'); const readline = require('readline'); async function processLineByLine() { const fileStream = fs. createReadStream('input. txt'); const rl = readline.

Làm cách nào để đọc một tệp văn bản trong Node JS?

Chúng ta có thể sử dụng mô -đun 'FS' để đối phó với việc đọc tệp.FS.readfile () và fs.Các phương thức readfilesync () được sử dụng cho các tệp đọc.use the 'fs' module to deal with the reading of file. The fs. readFile() and fs. readFileSync() methods are used for the reading files.

Làm thế nào để bạn đọc dòng cuối cùng của một tệp trong Python?

Cách đọc dòng cuối cùng của một tập tin trong Python..
Vòng lặp qua từng dòng trong tệp ..
Bỏ qua từng dòng cho đến khi bạn đạt đến dòng cuối cùng ..
Lưu dòng cuối cùng trong bộ nhớ ..