Hướng dẫn python read hcl file - python đọc tệp hcl

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 đặt

pip install pyhcl

Cách sử dụng

Mô -đ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 JSON

PYHCL đ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úc

Tươ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

  • Nhận xét dòng duy nhất bắt đầu bằng # hoặc //# or //

  • Nhận xét đa dòng được gói trong / * và * / //* and */

  • Các giá trị được gán với phím Syntax Key = value (khoảng trắng không quan trọng). Giá trị có thể là bất kỳ nguyên thủy: chuỗi, số, boolean, đối tượng hoặc danh sách.key = value (whitespace doesn’t matter). The value can be any primitive: a string, number, boolean, object, or list.

  • Chuỗi được trích dẫn kép và có thể chứa bất kỳ ký tự UTF-8 nào. Ví dụ: "Xin chào, Thế giới""Hello, World"

  • Các số được coi là cơ sở 10. Nếu bạn có tiền tố một số có 0x, nó được coi là thập lục phân. Nếu nó được đặt trước với 0, nó được coi là một bát phân. Số có thể có trong ký hiệu khoa học: 1E10.

  • Giá trị Boolean: Đúng, Saitrue, false

  • Mảng có thể được thực hiện bằng cách gói nó trong []. Ví dụ: ["Foo", "Bar", 42]. Mảng có thể chứa các nguyên thủy và các mảng khác, nhưng không thể chứa các đối tượng. Các đối tượng phải sử dụng cú pháp khối được hiển thị bên dưới.[]. Example: ["foo", "bar", 42]. Arrays can contain primitives and other arrays, but cannot contain objects. Objects must use the block syntax shown below.

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ướ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
  • Nội dung đọc không bao gồm ký tự xuống dòng
  • Đọc từng dòng file txt trong Python bằng phương thức readline()
  • Đọc từng dòng file txt
  • Đọc từng dòng file txt cho tới cuối file
  • Xoá ký tự xuống dòng trong nội dung đọc
  • Tổng kết
  • Bài viết liên quan
  • Đổi tên file trong Python
  • Cách copy file trong python
  • Cách di chuyển file trong python
  • Kiểm tra tồn tại của file và thư mục trong python
  • Lấy danh sách tên file và thư mục trong python
  • Lấy danh sách tên file và thư mục theo điều kiện trong python
  • Cách đổi tên thư mục trong python
  • Lấy kích thước file và thư mục trong python

  • 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
  • Nội dung đọc không bao gồm ký tự xuống dòng
  • Đọc từng dòng file txt trong Python bằng phương thức readline()
  • Đọc từng dòng file txt
  • Đọc từng dòng file txt cho tới cuối file
  • Xoá ký tự xuống dòng trong nội dung đọc
  • Tổng kết

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.

  • Viết bởi Kiyoshi. Đã đăng ký bản quyền tác giả tại Creativecommons và DMCA
  • Bài viết liên quan
  • Đổi tên file trong Python

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

Nội dung đọc không bao gồm ký tự xuống dòngĐọc từng dòng file txt trong Python bằng phương thức readline()Đọc từng dòng file txt
Đọc từng dòng file txt cho tới cuối fileHướng dẫn cách 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.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.Để đọc file txt trong python, chúng ta có các phương pháp sau:
Nếu file không tồn tại thì trả về lỗi
Phương thức read(): Đọc toàn bộ tệp dưới dạng một chuỗiPhương thức readlines(): Đọc toàn bộ tệp dưới dạng listPhương thức readline(): Đọc từng dòng file trong python
Nếu file không tồn tại thì trả về lỗi
Để đọc file trong python, trước hết chúng ta cần mở file đó bằng hàm open() hoặc bằng câu lệnh with mà Kiyoshi đã hướng dẫn trong bài Mở và đóng file trong python.Phương thức readlines(): Đọc toàn bộ tệp dưới dạng listPhương thức readline(): Đọc từng dòng file trong python
Nếu file không tồn tại thì tạo file mới
Để đọc file trong python, trước hết chúng ta cần mở file đó bằng hàm open() hoặc bằng câu lệnh with mà Kiyoshi đã hướng dẫn trong bài Mở và đóng file trong python.Lưu ý là tùy thuộc vào mục đích của việc đọc file mà mode dùng để mở file cũng sẽ khác nhau, do vậy chúng ta cần hết sức chú ý khi lựa chọn mode khi mở file.Ở đây, mode đọc file chính là thông tin về những việc cần làm với một file. Các mode có thể dùng để đọc file trong Python như sau:
Nếu file không tồn tại thì tạo file mới

Mode

f = open('myfile.txt', 'r')

Xử lý

with open('myfile.txt', 'r') as f:
print(type(f))

Chức năng

f = open('myfile.txt')

with open('myfile2.txt') as f:
print(type(f))

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ỗi

Nế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òng

with open('myfile.txt', 'r') as f:
print(type(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:
print(type(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:
print(type(f))
3

Kết quả:

with open('myfile.txt', 'r') as f:
print(type(f))
4
  • 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.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òng

with open('myfile.txt', 'r') as f:
print(type(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é.

  • f = open('myfile.txt', 'r', encoding='UTF-8')
    3 có nội dung gồm 3 hàng như sau:
    with open('myfile.txt', 'r') as f:
    print(type(f))
    1

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:
print(type(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:
print(type(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:
print(type(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òng

Cá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:
print(type(f))
1
with open('myfile.txt', 'r') as f:
print(type(f))
9

Bạn cũng có thể làm tương tự với lệnh with như sau:

f = open('myfile.txt')

with open('myfile2.txt') as f:
print(type(f))
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 file

Phươ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')

with open('myfile2.txt') as f:
print(type(f))
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')

with open('myfile2.txt') as f:
print(type(f))
2

Cả hai cách viết đều đưa ra cùng kết quả như sau:

f = open('myfile.txt')

with open('myfile2.txt') as f:
print(type(f))
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 đọc

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:

f = open('myfile.txt')

with open('myfile2.txt') as f:
print(type(f))
4

Hoặc là

f = open('myfile.txt')

with open('myfile2.txt') as f:
print(type(f))
5

Cả hai cách viết đều đưa ra cùng kết quả như sau:

f = open('myfile.txt')

with open('myfile2.txt') as f:
print(type(f))
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

  • 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é.

  • 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.

  • Viết bởi Kiyoshi. Đã đăng ký bản quyền tác giả tại Creativecommons và DMCA

  • Bài viết liên quan

  • Đổi tên file trong Python

  • Cách copy file trong python

  • Cách di chuyển file trong python

  • Kiểm tra tồn tại của file và thư mục trong python