configparser: whitespace not stripped when writing empty values
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug description:
When writing a configparser.ConfigParser to a file, keys with an empty value add a whitespace at the end of the line.
Eg. a line key = , ending with a whitespace.
import configparser
config = configparser.ConfigParser()
config["DEFAULT"] = {'ok': 'value', 'error': ''}
with open("test.ini", "w") as fhandle:
config.write(fhandle)
Now the contents of test.ini are:
[DEFAULT]
ok = value
error =
The line with the key "error" ends in a space. It appears the extra whitespace is introduced in ConfigParser.write(). Whitespaces are added to the delimiter, but this does not account for empty values.
class ConfigParser:
def write(self, fp, space_around_delimiters=True):
if space_around_delimiters:
d = " {} ".format(self._delimiters[0])
...
Stripping the whitespace of the value in ConfigParser._write_section() solves this.
class ConfigParser:
def _write_section(self, fp, section_name, section_items, delimiter, unnamed=False):
if not unnamed:
fp.write(f"[{section_name}]\n")
for key, value in section_items:
self._validate_key_contents(key)
value = self._interpolation.before_write(
self, section_name, key, value
)
if value is not None or not self._allow_no_value:
# Convert all possible line-endings into '\n\t'
value = (delimiter + str(value).replace('\r\n', '\n')
.replace('\r', '\n').replace('\n', '\n\t'))
else:
value = ""
# Change from the original: strip empty space to avoid "key = " for
# empty keys!!!
line = f"{key}{value}".strip(" ")
fp.write(f"{line}\n")
# Done with changes.
fp.write("\n")
CPython versions tested on:
3.14
Operating systems tested on:
Linux
Linked PRs
- gh-157467
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne bei ConfigParser.write() und _write_section(), die der Issue als Einstiegspunkte identifiziert, an denen das nachgestellte Leerzeichen eingeführt wird. Füge eine Abdeckung für das Schreiben eines leeren Werts hinzu und überprüfe, dass die erzeugte INI-Zeile kein nachgestelltes Whitespace enthält. Führe anschließend die relevanten configparser-Tests aus. Ein verknüpfter PR ist im Issue bereits vermerkt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 25/100