2012-02-28 25 views
14

Vì vậy, tôi đang viết một kịch bản mà đọc từ một tập tin cấu hình, và tôi muốn sử dụng nó một cách chính xác như thế nào configparser được thiết kế để được sử dụng như được nêu ở đây: http://docs.python.org/release/3.2.1/library/configparser.htmlPython configparser sẽ không chấp nhận các phím mà không đánh giá cao

Tôi sử dụng Python 3.2.1. Kịch bản, khi hoàn thành, sẽ chạy trên một máy tính Windows 2008 R2 sử dụng cùng một phiên bản của Python, hoặc giả định khả năng tương thích, phiên bản mới nhất tại thời điểm đó.

#!/user/bin/env python 
import configparser 

config = configparser.ConfigParser() 
config.read('c:\exclude.ini') 
config.sections() 

Làm việc tốt để đọc tệp exclude.ini - trừ khi tôi có giá trị không có khóa. Suy nghĩ tôi có thể làm điều gì đó sai cố gắng phân tích ví dụ được liệt kê ở đây: http://docs.python.org/release/3.2.1/library/configparser.html#supported-ini-file-structure

Nó vẫn ném mỗi lần sau:

File "C:\Python32\lib\configparser.py", line 1081, in _read 
    raise e 
configparser.ParsingError: Source contains parsing errors: c:\exclude.ini 
    [line 20]: 'key_without_value\n' 

Tôi đang ở một mất mát ... Tôi theo nghĩa đen sao chép/dán mã ví dụ từ tài liệu cho phiên bản python chính xác tôi đang sử dụng và nó không hoạt động như nó cần. Tôi chỉ có thể giả định rằng tôi thiếu một thứ gì đó vì tôi cũng không thể tìm thấy bất kỳ ai có vấn đề tương tự.

Trả lời

12

ConfigParser constructor có đối số từ khóa allow_no_value với giá trị mặc định là False.

Hãy thử đặt điều đó thành đúng và tôi đặt cược nó sẽ hoạt động cho bạn.

+0

Tuyệt vời, thankyou Karl. Có lẽ tôi nên gửi cho họ một lưu ý cho thấy thay đổi ví dụ của họ .ini để đặt một bình luận ở trên phần đó lưu ý rằng một phần chỉ hoạt động nếu constructor được thay đổi. Tôi cho rằng tôi nên đọc toàn bộ tài liệu, nhưng cách mọi thứ được đặt ra, nó trông giống như tôi đã làm việc như thế này theo mặc định. – Sparc

+0

thậm chí này hoạt động nếu đoạn văn này trông như thế này: [Phần mềm] 3700 Tạp chí Sao chép 1.0.2 Adobe Flash Player 11 ActiveX Adobe Reader X (10.1.7) - Deutsch DotNet Framework 4.0 [...] – enthus1ast

0
class RawConfigParser: 
def __init__(self, defaults=None, dict_type=_default_dict, 
      allow_no_value=False): 
    self._dict = dict_type 
    self._sections = self._dict() 
    self._defaults = self._dict() 
    if allow_no_value: 
     self._optcre = self.OPTCRE_NV 
    else: 
     self._optcre = self.OPTCRE 
    if defaults: 
     for key, value in defaults.items(): 
      self._defaults[self.optionxform(key)] = value 

nhập khẩu ConfigParser

cf = ConfigParser.ConfigParser (allow_no_value = True)

Các vấn đề liên quan