Cách đọc tệp excel từ thùng s3 bằng nút js

TRUY CẬP=cấu hình. s3bucket['aws_access_key']

BÍ MẬT=cấu hình. s3bucket['aws_secret_key']

url_e=config. thùng s3['url']

khách hàng = boto3. client(service_name="s3", region_name="us-east-1",

aws_access_key_id = TRUY CẬP,

aws_secret_access_key= BÍ MẬT)

khách hàng. download_file('bucketname','downloadfile. csv','downloadfile. csv')

print ("Đang tải xuống đối tượng %s từ bộ chứa %s" % ('downloadfile. csv','tên nhóm'))

#bước 1. tập tin chia thành hai tập tin

nếu hệ điều hành. con đường. tồn tại ('11. csv')

print('File đã tồn tại trước đó và đã bị xóa. ')

nếu hệ điều hành. con đường. tồn tại ('22. csv')

print('File đã tồn tại trước đó và đã bị xóa. ')

với open('downloadfile. csv', 'r', encoding='UTF-8') dưới dạng tệp

#with open(myfile, 'r', encoding='UTF-8') dưới dạng tệp.     

tiêu đề = dòng. dải('\n'). tách ra(',')

Chúng tôi tại H+S cống hiến cho một nguyên nhân đơn giản. tạo bài viết về các kịch bản lập trình cụ thể kỳ lạ. Ở một nơi nào đó trên thế giới, linh hồn buồn bã đang tìm cách truy cập các tệp theo chương trình từ máy chủ S3 trong khi giữ bộ chứa của họ ở chế độ riêng tư. Cho người đó. chúng tôi nghe thấy bạn

Có rất nhiều lý do khiến bạn muốn truy cập tệp trong S3. Ví dụ: giả sử bạn đã đọc bài đăng đó về cách sử dụng Pandas trong hàm Lambda. Vì bạn đã quen thuộc với PyMySQL, nên theo giả thuyết, bạn có thể xuất dữ liệu từ truy vấn DB sang CSV được lưu trong S3. Tôi cá là bạn có thể đoán những gì tôi đã làm gần đây

Định cấu hình AWS CLI trên VPS của bạn

Cách dễ nhất và an toàn nhất để tương tác với các dịch vụ AWS khác trên phiên bản EC2 (hoặc VPS bạn chọn) là thông qua AWS CLI. Điều này dễ dàng được cài đặt dưới dạng thư viện Python3 toàn cầu

$ pip3 install awscli

Với CLI được cài đặt, chúng tôi sẽ có thể làm điều gì đó thực sự kỳ diệu. đặt cấu hình AWS của chúng tôi trên toàn cầu. Điều này có nghĩa là bất cứ khi nào chúng tôi sử dụng để tương tác với một vi dịch vụ  (chẳng hạn như S3), thư viện boto3 sẽ luôn xem các tệp được lưu trữ trong

$ aws configure
$ AWS Access Key ID [None]: YOURACCESSKEY
$ AWS Secret Access Key [None]: YOURSECRETKEY
$ Default region name [None]: us-east-2
$ Default output format [None]: json
4 để tìm khóa và bí mật của chúng tôi mà không cần chúng tôi chỉ định. Điều này quan trọng từ góc độ bảo mật vì nó xóa tất cả các đề cập đến thông tin xác thực khỏi cơ sở mã của chúng tôi. bao gồm cả vị trí của những bí mật đã nói

Sử dụng

$ aws configure
$ AWS Access Key ID [None]: YOURACCESSKEY
$ AWS Secret Access Key [None]: YOURSECRETKEY
$ Default region name [None]: us-east-2
$ Default output format [None]: json
5 để bắt đầu quá trình

$ aws configure
$ AWS Access Key ID [None]: YOURACCESSKEY
$ AWS Secret Access Key [None]: YOURSECRETKEY
$ Default region name [None]: us-east-2
$ Default output format [None]: json

Điều này tạo ra một vài tệp cấu hình cho chúng tôi. Nếu chúng tôi không bao giờ cần sửa đổi các tệp này, chúng có thể được tìm thấy tại đây

$ vim ~/.aws/credentials
$ vim ~/.aws/config

Thời gian nút

Chúng tôi sẽ cho rằng bạn đã thiết lập một ứng dụng với một số định tuyến cơ bản, chẳng hạn như thiết lập ExpressJS barebones

Trong ứng dụng của bạn, chúng tôi sẽ cần thêm 2 phụ thuộc

$ npm install --save aws-sdk
$ npm install --save aws-config

Bây giờ chúng ta sẽ tạo một route

var awsConfig = require('aws-config');
var AWS = require('aws-sdk');

router.get('/export', function(req, res, next) {
    var file = 'df.csv';
    console.log('Trying to download file', fileKey);

    var s3 = new AWS.S3({});

    var options = {
        Bucket: 'your-bucket-name',
        Key: file,
    };

    s3.getObject(options, function(err, data) {
      res.attachment(file);
      res.send(data.Body);
  });
});

Lưu ý các dấu ngoặc nhọn trống trong

$ aws configure
$ AWS Access Key ID [None]: YOURACCESSKEY
$ AWS Secret Access Key [None]: YOURSECRETKEY
$ Default region name [None]: us-east-2
$ Default output format [None]: json
6. Nếu chúng tôi đã quyết định mã hóa cứng thông tin xác thực của mình vào mã nguồn một cách dã man, thì thông thường các giá trị đó sẽ nằm giữa các dấu ngoặc đó dưới dạng một đối tượng. Khi các dấu ngoặc trống, thư viện AWS sẽ tự động biết tìm đến tệp thông tin đăng nhập AWS của chúng tôi để biết các khóa bí mật và quyền truy cập của chúng tôi

Đây là cách bạn làm mọi thứ sai cách, chỉ trong trường hợp bạn muốn được giải trí

var s3 = new AWS.S3({
    'AccessKeyID': 'YOURACCESSKEY', 
    'SecretAccessKey': 'YOURSECRETACCESSKEY', 
    'Region': 'YOUR REGION'
});

Vâng, điều đó hoàn toàn sẽ không được thực hiện ở đâu đó một cách tình cờ. lắc đầu

Nó khá là nhiều. tuyến đường này sẽ nhắc tải xuống tệp đích khi nhấn vào tuyến đường. Tôi chắc chắn rằng tất cả chúng ta đều thích ngồi đây và trải qua các trường hợp sử dụng phức tạp hơn, chúng ta hãy tránh hoàn toàn Callback Hell và tận hưởng thời gian còn lại trong ngày

Bạn có thể tạo bất kỳ tệp Excel nào bạn thích, ảnh chụp màn hình của tệp đơn giản mà tôi sẽ sử dụng cho bài viết này ở bên dưới. Tôi đặt tên tệp là Dữ liệu. xlsx

dữ liệu excel. Trang tính mặc định1

Tôi sẽ sử dụng Visual Studio Code (VSCode)

  1. Mở cửa sổ terminal của bạn và gõ, npm init. Bạn chỉ có thể chấp nhận các giá trị mặc định sẽ tạo chỉ mục tệp chính của chúng tôi. js như đã thấy trong gói của bạn. tập tin json
  2. Trong cửa sổ đầu cuối của bạn, hãy nhập nội dung sau để cài đặt gói làm cho tất cả hoạt động
npm install read-excel-file
  1. Tạo một tệp có tên là chỉ mục. js và mở nó

Đọc tệp Excel

Bây giờ chúng tôi đã sẵn sàng để đọc tệp

Thêm đoạn mã sau vào chỉ mục của bạn. tập tin js

const xlsxFile = require('read-excel-file/node');

xlsxFile('./Data.xlsx').then((rows) => {


}

Ghi chú bên lề. Trong câu lệnh yêu cầu, chúng tôi đã chỉ định /node. Điều này rất quan trọng vì điều này cũng có thể được thực hiện với JavaScript trong trình duyệt bằng cách sử dụng,

________số 8

Tuy nhiên, chúng tôi muốn phiên bản nút

Mật mã

Dòng đầu tiên nhập gói

Dòng thứ hai đọc tệp, trả lại lời hứa. Khi đọc xong, chúng tôi nhận được các mảng

Mỗi mảng (tham số hàng của hàm gọi lại) chứa một hàng trong bảng tính. Mỗi trong số này có ba mảng tương ứng với ba cột trong bảng tính của chúng tôi

Về cơ bản, chúng tôi đang lấy lại một mảng hai chiều

Xem dữ liệu thô

Sửa đổi mã của bạn để xác minh rằng chúng tôi đang lấy dữ liệu từ tệp

const xlsxFile = require('read-excel-file/node');

xlsxFile('./Data.xlsx').then((rows) => {
console.log(rows);
console.table(rows);
})

Chạy cái này ở chế độ gỡ lỗi, F5, rồi chạy mà không cần gỡ lỗi, Ctrl + F5

Chạy trong cả hai sẽ giúp chúng tôi hình dung những gì chúng tôi đang nhận lại cũng như xác minh dữ liệu đã được đọc từ tệp

F5

Ở đây chúng ta thấy chúng ta có một mảng có năm phần tử. Mỗi phần tử là một hàng từ tệp của chúng tôi. Mỗi hàng chứa một mảng có ba phần tử. Ba mảng này tương ứng với các cột của chúng tôi. Mảng hai chiều

CTRL+F5

Điều này cho một bức tranh tốt hơn về cấu trúc mảng

Lấy dữ liệu thực tế

Vì dữ liệu ở dạng mảng nên có thể dễ dàng truy cập. Dưới đây là hai cách để truy cập dữ liệu

vòng lặp forEach

Sửa đổi mã của bạn như sau để xem từng phần dữ liệu và đó là loại dữ liệu

Tham số dữ liệu chứa chứa mục nhập ô bảng tính

$ aws configure
$ AWS Access Key ID [None]: YOURACCESSKEY
$ AWS Secret Access Key [None]: YOURSECRETKEY
$ Default region name [None]: us-east-2
$ Default output format [None]: json
0

Đối với mục đích của chúng tôi, đầu ra chỉ là một danh sách, nhưng chúng tôi có quyền truy cập vào dữ liệu và có thể xác minh loại dữ liệu của nó

Đầu ra sử dụng forEach

vì. trong vòng lặp

Sửa đổi mã của bạn để sử dụng vòng lặp for…in

$ aws configure
$ AWS Access Key ID [None]: YOURACCESSKEY
$ AWS Secret Access Key [None]: YOURSECRETKEY
$ Default region name [None]: us-east-2
$ Default output format [None]: json
1

Kết quả tương tự khi chạy nhưng mã này cho phép chúng ta nhìn rõ hơn cấu trúc mảng và cách truy cập các phần tử mảng

rows[i][j] chứa dữ liệu trong mỗi ô của bảng tính

Xử lý nhiều trang tính

Điều gì sẽ xảy ra nếu chúng ta có hai trang tính có tên là Dev và Exec?

Theo mặc định, khi chúng tôi đọc, tờ đầu tiên được đọc. Tuy nhiên chúng ta có thể,

  • Lấy danh sách tên sheet
  • Chỉ định Trang tính mà chúng tôi muốn dữ liệu

Tệp Excel đã sửa đổi

Tôi đã sửa đổi tệp Excel của mình, Dữ liệu. xlsx, để có hai trang tính

Bảng phát triển

Bảng điều hành

Lấy danh sách tên trang tính

Tên trang tính được trả về dưới dạng một mảng đối tượng. Mỗi đối tượng có cấu trúc,

{Tên. 'tên trang tính'}

Trong trường hợp của chúng tôi, nó sẽ trả về mảng này, [{name. 'Nhà phát triển'}, {tên. ‘Exec’}]

Sửa đổi mã của bạn như sau để có danh sách các trang tính

$ aws configure
$ AWS Access Key ID [None]: YOURACCESSKEY
$ AWS Secret Access Key [None]: YOURSECRETKEY
$ Default region name [None]: us-east-2
$ Default output format [None]: json
2

Ở đây chúng tôi đã chuyển tham số đối tượng { getSheets. thật }

Sau đó, sử dụng vòng lặp forEach để lặp qua mảng trang tính và truy cập thuộc tính tên của từng đối tượng

Truy cập tên trang tính. Nhà phát triển, Giám đốc điều hành

Chỉ định trang tính để lấy dữ liệu

Để chỉ định trang tính mong muốn, chúng tôi sẽ chuyển {sheet. } tham số đối tượng. Cái này có hai dạng. Bạn có thể chỉ định theo số trang tính hoặc tên trang tính. Để truy cập trang 2, chúng ta có thể sử dụng một trong những cách sau,

  • {tấm. 2 }
  • {tấm. 'Thực thi'}

Sửa đổi mã của bạn như sau để truy cập dữ liệu của bảng Exec

$ aws configure
$ AWS Access Key ID [None]: YOURACCESSKEY
$ AWS Secret Access Key [None]: YOURSECRETKEY
$ Default region name [None]: us-east-2
$ Default output format [None]: json
3

Sheet2, Exec, dữ liệuKết luận

Gói npm thực hiện tất cả công việc đọc tệp. Phần quan trọng là cách dữ liệu được trả về. Nó được trả về dưới dạng một mảng hai chiều

Làm cách nào để đọc tệp từ nhóm S3 bằng NodeJS?

Làm cách nào để sử dụng Bộ chứa AWS S3 với Ứng dụng NodeJS? .
Bước 1. Nhận khóa thông tin xác thực của bạn
Bước 2. Tạo một nhóm
Bước 3. Triển khai trong dự án nodeJs. Tải đối tượng/tệp lên thùng. Truy cập hoặc tải xuống đối tượng/tệp từ thùng. Xóa đối tượng/tệp khỏi thùng

Làm cách nào để đọc dữ liệu từ tệp excel trong NodeJS?

Dòng đầu tiên nhập gói. .
Dòng thứ hai đọc tệp, trả lại lời hứa. .
Xem dữ liệu thô
Chạy cái này ở chế độ gỡ lỗi, F5, rồi chạy mà không cần gỡ lỗi, Ctrl + F5
vòng lặp forEach
Tham số dữ liệu chứa chứa mục nhập ô bảng tính
vì. trong vòng lặp
rows[i][j] chứa dữ liệu trong mỗi ô của bảng tính

Làm cách nào để tải lên tệp excel trong S3 bằng nút js?

Trong vài bước tiếp theo, tôi sẽ hướng dẫn bạn xây dựng một ứng dụng dựa trên nodejs, ứng dụng này có thể ghi bất kỳ tệp nào lên AWS S3. .
Thiết lập ứng dụng nút. Một ứng dụng nút cơ bản thường có 2 tệp, gói. .
Cài đặt phụ thuộc. Hãy bắt đầu bằng cách cài đặt gói NPM. .
gói nhập khẩu. .
Truyền thông tin nhóm và viết logic nghiệp vụ. .
Tệp để tải lên S3

Làm cách nào để đọc tệp excel lớn trong NodeJS?

Tạo bộ đếm thời gian bằng cách sử dụng setInterval để chạy theo các khoảng thời gian đều đặn, đọc N hàng mỗi lần, thực hiện thao tác nào đó với chúng rồi thoát khỏi bộ đếm thời gian và cho phép bộ đếm thời gian chạy lại, khi tất cả các hàng đã được đọc sạch bằng cách dừng bộ đếm thời gian và đóng sổ làm việc đang mở