How to remove a section from an ini file using Python ConfigParser?

2024/10/5 23:21:35

I am attempting to remove a [section] from an ini file using Python's ConfigParser library.

>>> import os
>>> import ConfigParser
>>> os.system("cat a.ini")
[a]
b = c0>>> p = ConfigParser.SafeConfigParser()
>>> s = open('a.ini', 'r+')
>>> p.readfp(s)
>>> p.sections()
['a']
>>> p.remove_section('a')
True
>>> p.sections()
[]
>>> p.write(s)
>>> s.close()
>>> os.system("cat a.ini")
[a]
b = c0
>>>

It appears that the remove_section() happens only in-memory and when asked to write back the results to the ini file, there is nothing to write.

Any ideas on how to remove a section from the ini file and persist it?

Is the mode that I'm using to open the file incorrect? I tried with 'r+' & 'a+' and it didn't work. I cannot truncate the entire file since it may have other sections that shouldn't be deleted.

Answer

You need to open the file in write mode eventually. This will truncate it, but that is okay because when you write to it, the ConfigParser object will write all the sections that are still in the object.

What you should do is open the file for reading, read the config, close the file, then open the file again for writing and write it. Like this:

with open("test.ini", "r") as f:p.readfp(f)print(p.sections())
p.remove_section('a')
print(p.sections())with open("test.ini", "w") as f:p.write(f)# this just verifies that [b] section is still there
with open("test.ini", "r") as f:print(f.read())
https://en.xdnf.cn/q/70434.html

Related Q&A

why does this script not work with threading python

so ive been trying to ifnd a way to access task manager. Ive tried a few methods including the wmi module and the windows tasklist but neither suit my need. wmi is way too slow and tasklist becomes to…

django-admin command not working in Mac OS

I started Django in Mac OS and after installing Django using pip, I tried to initiated a new project using the command django-admin startproject mysite. I get the error -bash: django-admin: command not…

HeartBleed python test script

I came across this Python script that tests the server for the HeartBleed vulnerability: Would someone be able to explain the content of the "hello", what is being sent and how was this cont…

How to convert a wand image object to numpy array (without OpenCV)?

I am converting pdf files to image using Wand. Then, I do further image processing using ndimage. I would like to directly convert the Wand image into a ndarray... I have seen the answer here, but it u…

Import error running unittest in Python3

I have a problem importing files in Python 3.6. My directories tree is as given below:project/app/├── __init__.py├── a.py└── b.pytest/├── __init__.py├── test_a.py└── test_b.pyIt works…

python: obtaining the OSs argv[0], not sys.argv[0]

(This question was asked here, but the answer was Linux-specific; Im running on FreeBSD and NetBSD systems which (EDIT: ordinarily) do not have /proc.)Python seems to dumb down argv[0], so you dont get…

Why does mypy not accept a list[str] as a list[Optional[str]]?

Example 1: from typing import List, Optionaldef myfunc() -> List[Optional[str]]:some_list = [x for x in "abc"]return some_listMypy complains on example 1:Incompatible return value type (go…

How to do I groupby, count and then plot a bar chart in Pandas?

I have a Pandas dataframe that looks like the following.year month class ---- ----- ----- 2015 1 1 2015 1 1 2015 1 2 2015 1 2 ...I want to be able to create 2 bar chart seri…

How do I execute more code after closing a PyQt window?

Heres an example below:if __name__ == __main__:import sysif (sys.flags.interactive != 1) or not hasattr(QtCore, PYQT_VERSION):QtGui.QApplication.instance().exec_()print "you just closed the pyqt w…

Tor doesnt work with urllib2

I am trying to use tor for anonymous access through privoxy as a proxy using urllib2.System info: Ubuntu 14.04, recently upgraded from 13.10 through dist-upgrade.This is a piece of code I am using for …