How to remove spaces while writing in INI file- Python

前端 未结 2 865
-上瘾入骨i
-上瘾入骨i 2021-01-19 02:36

I am using a file and i have one section named DIR in which it contain the paths. EX:

[DIR]
DirTo=D:\\Ashish\\Jab Tak hai Jaan
DirBackup = D:\\Parser\\ERICS         


        
相关标签:
2条回答
  • 2021-01-19 02:59

    I ran into this problem to and I came up with an additional solution.

    • I didn't want to replace the function as future versions of Python might change the internal function structures of RawConfigParser.
    • I also didn't want to read the file back in right after it was written because that seemed wasteful

    Instead I wrote a wrapper around the file object which simply replaces " = " with "=" in all lines written though it.

    class EqualsSpaceRemover:
        output_file = None
        def __init__( self, new_output_file ):
            self.output_file = new_output_file
    
        def write( self, what ):
            self.output_file.write( what.replace( " = ", "=", 1 ) )
    
    config.write( EqualsSpaceRemover( cfgfile ) )
    
    0 讨论(0)
  • 2021-01-19 03:05

    Here is the definition of RawConfigParser.write:

    def write(self, fp):
        """Write an .ini-format representation of the configuration state."""
        if self._defaults:
            fp.write("[%s]\n" % DEFAULTSECT)
            for (key, value) in self._defaults.items():
                fp.write("%s = %s\n" % (key, str(value).replace('\n', '\n\t')))
            fp.write("\n")
        for section in self._sections:
            fp.write("[%s]\n" % section)
            for (key, value) in self._sections[section].items():
                if key != "__name__":
                    fp.write("%s = %s\n" %
                             (key, str(value).replace('\n', '\n\t')))
            fp.write("\n")
    

    As you can see, the %s = %s\n format is hard-coded into the function. I think your options are:

    1. Use the INI file with whitespace around the equals
    2. Overwrite RawConfigParser's write method with your own
    3. Write the file, read the file, remove the whitespace, and write it again

    If you're 100% sure option 1 is unavailable, here's a way to do option 3:

    def remove_whitespace_from_assignments():
        separator = "="
        config_path = "config.ini"
        lines = file(config_path).readlines()
        fp = open(config_path, "w")
        for line in lines:
            line = line.strip()
            if not line.startswith("#") and separator in line:
                assignment = line.split(separator, 1)
                assignment = map(str.strip, assignment)
                fp.write("%s%s%s\n" % (assignment[0], separator, assignment[1]))
            else:
                fp.write(line + "\n")
    
    0 讨论(0)
提交回复
热议问题