chap,
Tôi đang cố mở một tệp bằng cách sử dụng open[] nhưng tên của tệp được tạo
động dưới dạng một biến nhưng cũng có một phần của đường dẫn tĩnh. Chẳng hạn,
tệp có thể được gọi là 'dave' và sẽ luôn ở trong '/my/files/here/'.
Bây giờ tôi đã thử một vài cách kết hợp để làm việc này, chẳng hạn như
Đường dẫn = '/my/files/here/%s' % [tên]
Mở[Đường dẫn, 'r']
Nhưng điều đó có hiệu quả, bất kỳ ai cũng có thể khai sáng cho tôi cách tốt nhất để thực hiện việc này?
Cảm ơn,
cướp
-------------- phần tiếp theo --------------
Một tệp đính kèm HTML đã bị xóa.
URL.
Khi chúng tôi viết một ứng dụng bằng Python, chúng tôi có thể muốn nó có thể chạy trong các môi trường khác nhau. Hoặc, chúng tôi muốn nó có các hành vi khác nhau trong thời gian chạy. Đó là, tham số hóa ứng dụng này thay vì mã hóa cứng mọi thứ, bởi vì chúng tôi không muốn thay đổi mã để thích ứng với các tình huống
Điều này có thể được thực hiện theo nhiều cách. Một trong những cách tiếp cận phổ biến là thêm đối số vào chương trình. Đây là một trong những bài viết trước đây của tôi giới thiệu chi tiết về phương pháp này
Typer — Có lẽ là thư viện giao diện dòng lệnh Python đơn giản nhất để sử dụng
Nó đứng trên vai người khổng lồ — Click
hướng tới khoa học dữ liệu. com
Tuy nhiên, những hạn chế của việc sử dụng lập luận cũng rất rõ ràng.
- Không thực tế khi thêm một số lượng lớn đối số khi chúng ta chạy chương trình
- Đối số khởi tạo không thể thay đổi trong thời gian chạy. Ta phải chạy lại chương trình để thay đổi các thông số
- Nó không thân thiện với người dùng để giữ lại các giá trị hoặc đối số. Vì vậy, không dễ để chia sẻ với người khác
Khi chúng tôi đáp ứng ít nhất một trong các ràng buộc trên, bạn nên cân nhắc sử dụng tệp cấu hình. Vì vậy, tất cả các tham số có thể được thể hiện thành một tệp văn bản
Trong bài viết này, tôi sẽ giới thiệu một trong những mô-đun tích hợp sẵn của Python có tên là
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5. Nó sẽ cho phép chúng tôi đọc và ghi vào các tệp cấu hình bên ngoài hộp1. Ghi vào tệp cấu hìnhHình ảnh được cung cấp bởi Jarkko Mänty từ Pixabay
Sẽ hợp lý hơn nếu bắt đầu bằng cách đọc tệp cấu hình. Tuy nhiên, nếu bạn đã quen với phong cách viết của tôi, bạn sẽ biết rằng tôi luôn cố gắng viết những bài có thể theo thứ tự. Vì vậy, trước tiên chúng ta có thể bắt đầu với thử nghiệm này để ghi cấu hình vào một tệp
Vì
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5 được tích hợp sẵn trong Python 3 nên chúng ta chỉ cần nhập nó vào và bắt đầu sử dụng. Không có gì cần phải tải xuống và cài đặtimport configparserconfig = configparser.ConfigParser[]
Ở đây, chúng tôi khởi tạo một đối tượng có tên là
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
7 bằng cách sử dụng lớp with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
8 từ mô-đun. Vì vậy, chúng tôi đã có một đối tượng cấu hình1. 1 Xây dựng đối tượng cấu hình
Không có quá nhiều sự khác biệt khi chúng ta sử dụng đối tượng
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
7 so với từ điển. Khi chúng ta muốn thêm một số mục cấu hình vào đối tượng, chúng ta có thể thêm chúng như thế nàyconfig['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
Khóa “cấp cao nhất”
config['RUN_PARAMETERS'] = {}0 sẽ được coi là một phần của tệp cấu hình. Đối với phần
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
config['RUN_PARAMETERS'] = {}0, chúng tôi đã xác định một từ điển có hai mục. Sau đó, chúng ta có thể thử ghi đối tượng cấu hình này vào một tệp văn bản như sau
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
Đây là tập tin mà chúng tôi vừa viết
Đó là nó. Tất nhiên, chúng tôi không phải cung cấp toàn bộ từ điển trong một lần. Lên dần dần phần config như sau là hoàn toàn ổn
config['RUN_PARAMETERS'] = {}
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
Sau đó, tệp sẽ được nối với phần mới
1. 2 Giá trị cấu hình phải là chuỗi
Tuy nhiên, so với một từ điển thực tế, một số ràng buộc được thêm vào một đối tượng cấu hình nhằm mục đích. Ví dụ, điều đáng nói là tất cả các giá trị cấu hình phải là chuỗi. Nếu chúng tôi cố gắng đưa ra một giá trị không phải chuỗi như sau, nó sẽ phàn nàn
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
1Điều này có ý nghĩa vì tất cả các giá trị cấu hình sẽ được ghi vào một tệp văn bản sau đó. Buộc sử dụng các giá trị chuỗi sẽ giảm khả năng mắc lỗi và giữ tính nhất quán
2. Đọc từ tệp cấu hìnhHình ảnh được cung cấp bởi MustangJoe từ Pixabay
Bây giờ chúng ta có thể đi vào chủ đề chính của ngày hôm nay. Đó là đọc từ một tập tin cấu hình. Xin lưu ý rằng phần mở rộng của tệp văn bản không quan trọng và thậm chí định dạng của các cặp khóa-giá trị là nội dung sẽ được giới thiệu chi tiết trong phần này
2. 1 Đọc đối số cho một đối tượng cấu hình
Trước khi muốn đọc từ file cấu hình, chúng ta cũng cần một đối tượng
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
7with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
3Hàm
config['RUN_PARAMETERS'] = {}3 sẽ trả về tên tệp cấu hình trong danh sách. Điều này là do
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5 có thể đọc nhiều tệp cấu hình vào một đối tượng. Khi chúng tôi đã đọc các mục, chúng tôi cũng có thể kiểm tra tất cả các phần bằng hàm config['RUN_PARAMETERS'] = {}5
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
7Nếu bạn không bỏ qua phần trước, bạn có thể dễ dàng nhận được các đối số mà chúng tôi đã ghi vào tệp cấu hình
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
82. 2 Đọc đối số với kiểu dữ liệu
Thông thường sẽ có một số đối số không phải chuỗi trong tệp cấu hình, chẳng hạn như số nguyên, float hoặc boolean. Không có gì ngăn cản bạn đọc chúng thành các chuỗi, sau đó chuyển đổi chúng thành các kiểu dữ liệu mà chúng nên có. Một cái gì đó như sau
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
9Tuy nhiên,
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5 cho phép chúng tôi đọc các giá trị thành các loại dữ liệu nhất định mà không cần các bước chuyển đổi bổ sung. Ví dụ: phương thức config['RUN_PARAMETERS'] = {}7 sẽ đọc các giá trị dưới dạng số nguyên, trong khi phương thức
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
config['RUN_PARAMETERS'] = {}8 sẽ đọc chúng thành kiểu bool
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
import configparserconfig = configparser.ConfigParser[]3
2. 3 giá trị dự phòng
Đôi khi, bản thân tệp cấu hình cũng có thể là động. Một trong những tính năng mong muốn là chúng tôi có thể muốn người dùng chỉ cần thêm các đối số cần thiết chứ không phải mọi thứ. Tuy nhiên, đối với những tham số không tồn tại, nó sẽ tăng
config['RUN_PARAMETERS'] = {}9
config['RUN_PARAMETERS']['start_time'] = '2020-05-01 00:00:00'
config['RUN_PARAMETERS']['end_time'] = '2020-05-31 00:00:00'
config['RUN_PARAMETERS']['frequency_min'] = '10'
config['RUN_PARAMETERS']['is_active'] = 'True'with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
0Cách giải khá giống với từ điển thông thường. Chúng ta có thể sử dụng hàm
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
10 để lấy giá trị của khóa và cung cấp giá trị dự phòng khi không nhận được giá trị nàoconfig['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
1Trong ví dụ trên, khi chúng tôi cố lấy
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
11, nó tồn tại để chúng tôi lấy lại giá trị, trong khi khóa with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
12 không tồn tại, vì vậy chuỗi trống sẽ được sử dụng làm giá trị dự phòng2. 4 Thu nhận giá trị đa cấp
Chúng ta cũng có thể sử dụng phương thức
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
10 để lấy giá trị của khóa trực tiếp từ đối tượng cấu hình, điều đó có nghĩa là chúng ta cũng có thể đặt tên phần trong phương thứcconfig['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
2Khi chúng tôi đang sử dụng phương pháp
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
10 như trên, chúng tôi cũng có thể xác định rõ ràng giá trị dự phòng như sauconfig['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
3Điều đáng nói là tính năng đa cấp cũng hoạt động với phương thức “lấy kiểu dữ liệu”.
config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
42. 5 Kiểm tra sự tồn tại của khóa
Cuối cùng, giống như từ điển Python, chúng ta cũng có thể kiểm tra xem một khóa có tồn tại trong một phần hay không như sau
config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
53. Phần mặc định
Hình ảnh được cung cấp bởi Michael Schwarzenberger từ Pixabay
Có một phần ma thuật trong phần
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5, đó là phần with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
16. Khi tệp cấu hình có phần mặc định, giá trị sẽ có thể truy cập được từ bất kỳ phần nàoHãy xây dựng một ví dụ bằng cách viết phần
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
16 vào tệp cấu hìnhconfig['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
6Sau đó, nếu chúng tôi cố gắng liệt kê tất cả các phần trong đối tượng cấu hình, chúng tôi sẽ thấy rằng phần mặc định sẽ không có ở đó
Tuy nhiên, có thể chứng minh rằng nó chắc chắn có
config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
7Đây là tính năng của phần mặc định
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5 và như tôi đã nói trước đây, các mục trong phần mặc định có thể được truy cập từ bất kỳ phần nào khác. Nếu chúng tôi cố gắng liệt kê tất cả các cặp khóa-giá trị trong hai phần còn lại, chúng tôi sẽ thấy chúng tồn tại trong cả hai phầnconfig['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
84. Định dạng cặp khóa-giá trị được hỗ trợ
Hình ảnh được cung cấp bởi Michael Schwarzenberger từ Pixabay
Việc sử dụng dấu bằng
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
19 cho các thuộc tính khóa-giá trị khá phổ biến đối với các tệp cấu hình. Tuy nhiên, thực sự có các định dạng khác được sử dụng trong các tiêu chuẩn khác nhau. Cái hay của mô-đun with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5 là chúng ta có thể thấy rằng nó hỗ trợ hầu hết các kiểu phổ biếnHãy xác định một tệp cấu hình khác như sau. Sau đó, đặt tên cho nó là
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
31config['PERSON'] = {
'name': 'Christopher Tao',
'age': '34'
}
9Trong tệp cấu hình ví dụ này, nhiều kiểu khác nhau được trộn lẫn. Nếu chúng tôi cố gắng đọc tệp, tất cả các tình huống có thể được xử lý rất tốt
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
0Cả dấu bằng và dấu hai chấm đều hoạt động tốt
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
1Khi có sự ngắt dòng trong giá trị, nó có thể được ghi lại một cách chính xác
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
2Khi có bình luận, chúng sẽ bị bỏ qua. Vì vậy, đối với phần [Nhận xét], không có cặp khóa-giá trị nào tồn tại
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
3Nếu một phần bị thụt vào hoặc có khoảng trống không mong muốn ở phía trước tiêu đề phần hoặc các phím thì sẽ không có vấn đề gì
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
4Bản tóm tắt
Hình ảnh được cung cấp bởi Noel Bauza từ Pixabay
Trong bài viết này, tôi đã giới thiệu một thư viện tích hợp sẵn của Python có tên là
with open['settings.cfg', 'w'] as configfile:
config.write[configfile]
5. Nó cho phép chúng ta đọc và ghi các tham số động từ một tệp văn bản. Nó cũng cung cấp nhiều tính năng vượt trội như giá trị đọc vào các loại dữ liệu nhất định và giá trị dự phòng. Nó cũng hỗ trợ nhiều định dạng cặp khóa-giá trị hoạt động tốt với nhận xét, khóa trống và thụt lề không cần thiếtTham gia Medium với liên kết giới thiệu của tôi - Christopher Tao
Là thành viên Phương tiện, một phần phí thành viên của bạn sẽ được chuyển đến các tác giả mà bạn đã đọc và bạn có toàn quyền truy cập vào mọi câu chuyện…
vừa phải. com
Nếu bạn cảm thấy bài viết của tôi hữu ích, hãy cân nhắc tham gia Medium Membership để ủng hộ tôi và hàng ngàn người viết khác. [Nhấp vào liên kết ở trên]