Hướng dẫn python read hcl file - python đọc tệp hcl
Show
Thực hiện trình phân tích cú pháp cho HCL (ngôn ngữ cấu hình Hashicorp) trong Python. Việc triển khai này nhằm mục đích tương thích với phiên bản Golang gốc của trình phân tích cú pháp. Ngữ pháp và nhiều bài kiểm tra/đồ đạc đã được sao chép/chuyển từ trình phân tích cú pháp Golang vào PYHCL. Tất cả các bản phát hành được thử nghiệm với nhiều phiên bản Python từ Python 2.7 trở đi. Phiên bản này đã được sửa đổi để làm việc với cú pháp Terraform 0.12. Nó nên tương thích ngược với các phiên bản trước. Nó không bao gồm mọi tình huống. Xem Thảo luận trong Yêu cầu kéo: https://github.com/virtuald/pyhcl/pull/57 Cài đặtpip install pyhcl Cách sử dụngMô -đun này được dự định sẽ được sử dụng theo cách tương tự như cách người ta sẽ sử dụng mô -đun JSON trong Python và tải/tải/bãi rác được triển khai. import hcl with open('file.hcl', 'r') as fp: obj = hcl.load(fp) Hiện tại chức năng Dumps đầu ra JSON, và không HCL. Chuyển đổi HCl sang JSONPYHCL đi kèm với một kịch bản mà bạn có thể sử dụng để dễ dàng chuyển đổi HCL thành JSON, tương tự như json.tool đi kèm với Python: hcltool INFILE [OUTFILE] Xác thực cấu trúcTương tự như JSON, đầu ra của phân tích cú pháp HCL là từ điển Python không có cấu trúc xác định. Thư viện Golang cho HCL thực hiện hỗ trợ phân tích cú pháp HCL theo các đối tượng được xác định, nhưng việc triển khai này hiện không hỗ trợ các cấu trúc đó. Thay vào đó, tôi khuyên bạn nên sử dụng các công cụ được thiết kế để xác nhận JSON, chẳng hạn như thư viện sơ đồ. Cú pháp
Các đối tượng và các đối tượng lồng nhau được tạo bằng cấu trúc được hiển thị bên dưới: variable "ami" { description = "the AMI to use" } Kiểm traĐể chạy các bài kiểm tra: pip install -r testing-requirements.txt tests/run_tests.sh Chế độ kiểm tra sửa lỗiĐể bật chế độ gỡ lỗi: import hcl hcl.parser.DEBUG = True Tác giảDustin Spicuzza ([email protected])@virtualroadside.com) Lưu ý: Dự án này không liên quan đến Hashicorp Nội dung chính Nội dung chính ShowShow
Trên đây Kiyoshi đã hướng dẫn bạn về cách đọc file trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.xử lý file trong Python. Bạn sẽ biết cách đọc file trong python bằng mode r trong python, với các phương pháp như đọc toàn bộ file trong python hoặc đọc từng dòng file txt trong Python bằng các phương thức như read(), readlines() trong python sau bài học này. Và hãy cùng tìm hiểu các kiến thức về Python trong các bài viết sau.
Trước khi đọc file trong PythonĐọc toàn bộ file trong python dưới dạng chuỗi bằng phương thức read() Đọc toàn bộ file trong python dưới dạng list bằng phương thức readlines() Nội dung đọc bao gồm cả ký tự xuống dòng
Mode f = open('myfile.txt', 'r') Xử lý with open('myfile.txt', 'r') as f: Chức năng f = open('myfile.txt') r f = open('myfile.txt', 'r', encoding='UTF-8') Mở để đọc Chỉ cho phép đọc fileNếu file không tồn tại thì trả về lỗi Nếu file không tồn tại thì trả về lỗiNếu bạn muốn mở file này với mã ký tự khác với mã ký tự mặc định trên máy tính của mình, hãy chỉ định thêm đối số f = open('myfile.txt', 'r', encoding='UTF-8')0 như ví dụ sau: import hcl with open('file.hcl', 'r') as fp: obj = hcl.load(fp)5 Ngoài ra nếu bạn muốn mở file để vừa đọc và vừa ghi nội dung vào file chẳng hạn, hãy mở file bằng một số mode khác, ví dụ như là mode r+, hoặc a+ chẳng hạn. Đọc toàn bộ file trong python dưới dạng chuỗi bằng phương thức read()Trong trường hợp bạn chỉ định sai đường dẫn của file cần mở, hoặc là do file đó không tồn tại, lỗi FileNotFoundError sẽ bị xảy ra: f.read(size) Sau khi mở file thành công thì một object file sẽ được trả về. Chúng ta sẽ sử dụng object file này và thực hiện các thao tác đọc file như dưới đây. Sau khi mở file và thu về object file như trên, chúng ta có thể đọc toàn bộ file đó dưới dạng một chuỗi ký tự bằng cách sử dụng phương thức read() với object file đó. Cú pháp sử dụng sẽ là: import hcl with open('file.hcl', 'r') as fp: obj = hcl.load(fp)6 Trong đó f = open('myfile.txt', 'r', encoding='UTF-8')1 là object file, và f = open('myfile.txt', 'r', encoding='UTF-8')2 là đối số xác định số ký tự được đọc ra từ file. Nếu đối số này được lược bỏ, file sẽ được đọc cho đến cuối file (EOF).câu lệnh with trong Python như sau: import hcl with open('file.hcl', 'r') as fp: obj = hcl.load(fp)9câu lệnh with trong Python như sau: import hcl with open('file.hcl', 'r') as fp: obj = hcl.load(fp)9 Ví dụ chúng ta có file f = open('myfile.txt', 'r', encoding='UTF-8')3 có nội dung là f = open('myfile.txt', 'r', encoding='UTF-8')4. Chúng ta sẽ tiến hành đọc toàn bộ file này dưới dạng một chuỗi ký tự như sau: Bạn cũng có thể làm tương tự với câu lệnh with trong Python như sau: hcltool INFILE [OUTFILE]2 Lưu ý là nội dung file chứa trong object file f = open('myfile.txt', 'r', encoding='UTF-8')1 sẽ bị lấy đi sau mỗi lần sử dụng phương thức read(), do đó nếu bạn muốn sử dụng lại file thì bạn cần phải mở lại file đó như ví dụ trên. hcltool INFILE [OUTFILE]4 Hãy xem sự khác biệt khi sử dụng cùng một object file trong ví dụ sau đây: Kết quả: Bạn có thể thấy, ở lần đọc đầu tiên đã đọc xong ký tựf = open('myfile.txt', 'r', encoding='UTF-8')6 từ bên trong object file f = open('myfile.txt', 'r', encoding='UTF-8')1, nên tại lần đọc thứ 2 từ f = open('myfile.txt', 'r', encoding='UTF-8')1 thì kêt quả trả về sẽ không chứa ký tự f = open('myfile.txt', 'r', encoding='UTF-8')6. Lưu ý khi đọc file trong python, nếu mã ký tự được sử dụng trong tệp (ví dụ như mã ascii) khác với mã ký tự được chỉ định trong hàm open(), lỗi UnicodeDecodeError sẽ xảy ra khi chúng ta đọc file. Đọc toàn bộ file trong python dưới dạng list bằng phương thức readlines()Nội dung đọc bao gồm cả ký tự xuống dòngwith open('myfile.txt', 'r') as f:0 f.readlines() Do đó, hãy chỉ định chính xác mã ký tự dùng để đọc file giống với mã ký tự sử dụng để lưu file đó nhé. Ví dụ chúng ta có file f = open('myfile.txt', 'r', encoding='UTF-8')3 có nội dung là f = open('myfile.txt', 'r', encoding='UTF-8')4. Chúng ta sẽ tiến hành đọc toàn bộ file này dưới dạng một chuỗi ký tự như sau: Bạn cũng có thể làm tương tự với câu lệnh with trong Python như sau: with open('myfile.txt', 'r') as f:2 Lưu ý là nội dung file chứa trong object file f = open('myfile.txt', 'r', encoding='UTF-8')1 sẽ bị lấy đi sau mỗi lần sử dụng phương thức read(), do đó nếu bạn muốn sử dụng lại file thì bạn cần phải mở lại file đó như ví dụ trên. hcltool INFILE [OUTFILE]4 Hãy xem sự khác biệt khi sử dụng cùng một object file trong ví dụ sau đây: Kết quả: with open('myfile.txt', 'r') as f:3 Kết quả: with open('myfile.txt', 'r') as f:4
Lưu ý khi đọc file trong python, nếu mã ký tự được sử dụng trong tệp (ví dụ như mã ascii) khác với mã ký tự được chỉ định trong hàm open(), lỗi UnicodeDecodeError sẽ xảy ra khi chúng ta đọc file.ký tự xuống dòng được bao gồm trong phần tử của list, nên nếu in chúng ra màn hình thì sẽ xuất hiện các dấu xuống dòng giống như ví dụ trên. Đọc toàn bộ file trong python dưới dạng list bằng phương thức readlines() Nội dung đọc bao gồm cả ký tự xuống dòngwith open('myfile.txt', 'r') as f:0 Do đó, hãy chỉ định chính xác mã ký tự dùng để đọc file giống với mã ký tự sử dụng để lưu file đó nhé.
Chúng ta sẽ đọc toàn bộ file trên dưới dạng list như sau: with open('myfile.txt', 'r') as f:5 Bạn có thể thấy một list mới gồm 3 phần tử là có giá trị là nội dung của từng hàng (bao gồm cả ký tự xuống dòng with open('myfile.txt', 'r') as f:6 import hcl with open('file.hcl', 'r') as fp: obj = hcl.load(fp)31) trong file đã được tạo ra. Sau khi đọc nội dung của toàn bộ file dưới dạng list, chúng ta có thể xử lý chúng thông qua các phương thức hoặc hàm xử lý trong list Python. Bạn có thể tìm thấy các cách xử lý list trong python trong chuyên đề List trong python. with open('myfile.txt', 'r') as f:7 Ví dụ, chúng ta có thể in từng dòng trong file ban đầu thông qua việc truy cập vào phần tử trong list như sau:Xem thêm: Truy cập và lấy phần tử trong list Python]Lưu ý là do ký tự xuống dòng được bao gồm trong phần tử của list, nên nếu in chúng ra màn hình thì sẽ xuất hiện các dấu xuống dòng giống như ví dụ trên. f.readline() Nếu bạn muốn in ra màn hình mà không bị xuống dòng như vậy, hãy tham khảo bài viết in không xuống dòng trong python Nội dung đọc không bao gồm ký tự xuống dòngCách đọc từng dòng file txt trong python bằng phương thức readline() như ví dụ sau đây. Chúng ta sẽ sử dụng file f = open('myfile.txt', 'r', encoding='UTF-8')3 với nội dung gồm ba hàng như sau: with open('myfile.txt', 'r') as f:1 with open('myfile.txt', 'r') as f:9 Bạn cũng có thể làm tương tự với lệnh with như sau: f = open('myfile.txt')0 Trong ví dụ trên, do chúng ta chạy readline() một lần nên chỉ có dòng đầu tiên của file đã được đọc. Đọc từng dòng file txt cho tới cuối filePhương thức readline() chỉ giúp đọc một dòng trong file một lần duy nhất, do đó nếu muốn đọc từng dòng file txt trong python cho đến cuối file, chúng ta cần tạo ra vòng lặp và đọc lần lượt từng dòng trong file đó bằng readline() như sau: f = open('myfile.txt')1 Cách viết trên dựa vào việc nếu readline() đọc tới cuối file thì ký tự trống import hcl with open('file.hcl', 'r') as fp: obj = hcl.load(fp)33 sẽ được trả về, do đó chương trình sẽ break và thoát khỏi vòng lặp while tại vị trí cuối cùng của file. Nếu không dùng tới phương thức readline(), bạn cũng có thể đọc từng dòng file trong python với lệnh For như sau:đọc từng dòng file trong python với lệnh For như sau: f = open('myfile.txt')2 Cả hai cách viết đều đưa ra cùng kết quả như sau: f = open('myfile.txt')3 Bạn có thể thấy, giống như với phương thức readlines() thì ký tự xuống dòng sẽ bao gồm trong kết quả, do đó khi in ra màn hình sẽ có hai lần được in xuống dòng như ở kết quả của ví dụ ở trên. Xoá ký tự xuống dòng trong nội dung đọcMặc dù khi đọc từng dòng trong file thì kết quả đọc sẽ bao gồm cả ký tự xuống dòng, tuy nhiên chúng ta cũng có thể dễ dàng xóa đi ký tự xuống dòng này bằng cách sử dụng kèm phương thức strip() giống như ví dụ dưới đây: f = open('myfile.txt')4 Hoặc là f = open('myfile.txt')5 Cả hai cách viết đều đưa ra cùng kết quả như sau: f = open('myfile.txt')6 Bạn có thể thấy, giống như với phương thức readlines() thì ký tự xuống dòng sẽ bao gồm trong kết quả, do đó khi in ra màn hình sẽ có hai lần được in xuống dòng như ở kết quả của ví dụ ở trên.Xoá ký tự xuống dòng trong nội dung đọcđọc file trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé. Mặc dù khi đọc từng dòng trong file thì kết quả đọc sẽ bao gồm cả ký tự xuống dòng, tuy nhiên chúng ta cũng có thể dễ dàng xóa đi ký tự xuống dòng này bằng cách sử dụng kèm phương thức strip() giống như ví dụ dưới đây: Hoặc là Tổng kết
|