Tôi đang sử dụng ConfigParser để tải dữ liệu từ một tập tin cấu hình như sau:Làm thế nào để loại trừ DEFAULTs khỏi Python ConfigParser .items()?
test.conf:
[myfiles]
fileone: %(datadir)s/somefile.foo
filetwo: %(datadir)s/nudderfile.foo
load.py:
import ConfigParser
config = ConfigParser.ConfigParser({'datadir': '/tmp'})
config.read('test.conf')
print config.items('myfiles')
print config.get('myfiles', 'datadir')
Output :
$ python load.py
[('datadir', '/tmp'), ('filetwo', '/tmp/nudderfile.foo'), ('fileone', '/tmp/somefile.foo')]
/tmp
Tôi rất ngạc nhiên khi mặc định thay thế biến ('datadir', '/tmp')
hiển thị như một phần của. items()
và .get()
trả về, như thể chúng là các giá trị trong tệp cấu hình. Hành vi này có được mong đợi không? Bất kỳ công việc nào xung quanh, để tôi chỉ có thể lặp lại .items()
mà không nhận được các giá trị từ điển mặc định trong đó, nhưng vẫn sử dụng phép nội suy ma thuật?
Tham chiếu: http://docs.python.org/library/configparser.html
Cảm ơn!
Cập nhật: Đã được chỉ ra rằng đây là hành vi mong đợi: mặc định giống như bất kỳ cặp tên/giá trị nào khác trong tệp cấu hình. Tương tự như vậy, các cặp tên/giá trị trong file cấu hình cũng có sẵn để "suy ma thuật", vì vậy nếu tôi xác định:
foo: bar
zap: %(foo)snowl
tôi sẽ nhận được [... ('zap': 'barnowl')]
Đó là khá gọn gàng, nhưng tôi vẫn tự hỏi nếu tôi có thể thực hiện những gì tôi muốn thực hiện: lặp qua các cặp tên/giá trị trong các tệp cấu hình của tôi, với nội suy của các biến, không có các giá trị mặc định.
Kịch bản cụ thể của tôi là: Tôi muốn khởi tạo đối tượng cấu hình với một cái gì đó như {basedir: '/foo/bar'}
, vì đường dẫn tuyệt đối đến các tệp nhất định khác nhau tùy theo cài đặt. Sau đó, tôi cần truyền đối tượng cấu hình đó xung quanh và có nhiều lớp khác lặp lại thông qua các tệp. Tôi không muốn mọi lớp đọc cấu hình phải biết rằng nó đã được khởi tạo với các giá trị mặc định và nó sẽ bỏ qua chúng vì chúng không phải là các tệp thực sự. Điều này có thể không? Bất kỳ cách nào để ẩn các giá trị mặc định từ .item() và .get() nhưng vẫn có nội suy? Cảm ơn!
Tôi không thể hiểu được tại sao đây là hành vi mặc định, chứ chưa nói lý do tại sao không có cách nào để tắt nó đi. –