Python: Capitalize a word using string.format()

前端 未结 4 2073
萌比男神i
萌比男神i 2021-02-01 06:39

Is it possible to capitalize a word using string formatting? For example,

\"{user} did such and such.\".format(user=\"foobar\")

should return \

4条回答
  •  夕颜
    夕颜 (楼主)
    2021-02-01 06:49

    As said @IgnacioVazquez-Abrams, create a subclass of string.Formatter allow you to extend/change the format string processing.

    In your case, you have to overload the method convert_field

    from string import Formatter
    class ExtendedFormatter(Formatter):
        """An extended format string formatter
    
        Formatter with extended conversion symbol
        """
        def convert_field(self, value, conversion):
            """ Extend conversion symbol
            Following additional symbol has been added
            * l: convert to string and low case
            * u: convert to string and up case
    
            default are:
            * s: convert with str()
            * r: convert with repr()
            * a: convert with ascii()
            """
    
            if conversion == "u":
                return str(value).upper()
            elif conversion == "l":
                return str(value).lower()
            # Do the default conversion or raise error if no matching conversion found
            return super(ExtendedFormatter, self).convert_field(value, conversion)
    
    # Test this code
    
    myformatter = ExtendedFormatter()
    
    template_str = "normal:{test}, upcase:{test!u}, lowcase:{test!l}"
    
    
    output = myformatter.format(template_str, test="DiDaDoDu")
    print(output)
    

提交回复
热议问题