Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
how to remove \n from file?
#1
This python code writing configuration file for getmail to retrieve the mail, in the first and last f.write code i use the "\n" to break the lines for new line:
cur  = conn.cursor() 
query = "SELECT user, passwd, server FROM pop"
cur.execute(query)
for idx, row in enumerate(cur, start=1):
	with open(f'mail{idx}', 'w') as f:
		
		f.write('[options]\n verbose = 1\n read_all = false\n delete = true\n received = false\n delivered_to = false\n message_log = /home/mail/log\n message_log_verbose = true\n ')
		f.write('username = ')
		f.write(row[0])
		f.write("\n")
		f.write(' password = ')
		f.write(row[1])
		f.write("\n")
		f.write(' server = ')
		f.write(row[2])
		f.write("\n")
		f.write('[destination]\n type = MDA_external\n path = /usr/bin/exim\n arguments = ("-i", "-bm", "user@localhost")\n unixfrom = true\n ')
with cat the file seem ok there is no '\n' in the end of lines, but when run the getmail get the error:
Configuration error: configuration file /home/mail/mail1 incorrect (File contains parsing errors: /home/mail/mail1
	[line  2]: ' verbose = 1\n'
	[line  3]: ' read_all = false\n'
	[line  4]: ' delete = true\n'
	[line  5]: ' received = false\n'
	[line  6]: ' delivered_to = false\n'
how to remove the '\n' from the end of lines.
Reply
#2
If you remove the newline, they won't be separate lines.

I suspect the error is telling you that you have whitespace at the beginning of the lines. For getmail, the configuration assumes that if it starts with whitespace it is a continuation of the previous line.

Quote:A parameter value, if necessary, can span multiple lines. To indicate that the second and subsequent lines form a continuation of the previous line, they need to begin with leading whitespace, like this:
first_parameter = value
    first parameter value continues here
second_parameter = value

Get rid of the leading whitespace.
buran likes this post
Reply
#3
instead of writing the file like you do, look at configparser module from standard library. Your code will be way more clean and readable

import configparser

my_config="""[options]
verbose = 1
read_all = false
delete = true
received = false
delivered_to = false
message_log = /home/mail/log
message_log_verbose = true

[destination]
type = MDA_external
path = /usr/bin/exim
arguments = ("-i", "-bm", "user@localhost")
unixfrom = true"""

config = configparser.ConfigParser()
config.read_string(my_config)

cur  = conn.cursor() 
query = "SELECT user, passwd, server FROM pop"
cur.execute(query)
for idx, row in enumerate(cur, start=1):
    credentials = dict(zip(('username', 'password', 'server'), row))
    config['options'].update(credentials)
    with open(f'mail{idx}', 'w') as f:
        config.write(f)
instead of string my_config can be a dict

Also I don't know if MariaDB python connector supports DictCursor like MySQL connector, but if it does - you can use it.
bowlofred likes this post
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#4
Thanks for replies, yes also the problem was with the white spaces after \n i remove the all spaces after \n now it working, also special thanks to buran for the perfect code, it is working nice, the only thing is i forgot to add two lines (one section), i tried to add these lines to the code but failed, can you please add these two lines to the code so the configuration file just look like this:
[options]
verbose = 1
read_all = false
delete = true
received = false
delivered_to = false
message_log = /home/mail/log
message_log_verbose = true

[retriever]
type = SimplePOP3Retriever
username = [email protected]
password = ******
server = pop.gmail.com

[destination]
type = MDA_external
path = /usr/bin/exim
arguments = ("-i", "-bm", "user@localhost")
unixfrom = true
Reply
#5
(Feb-04-2021, 07:00 AM)shams Wrote: i tried to add these lines to the code but failed
C'mon, it couldn't be that difficult. Show what have you tried
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#6
i added the lines as this:
my_config="""[options]
verbose = 1
read_all = false
delete = true
received = false
delivered_to = false
message_log = /home/mail/log
message_log_verbose = true

[retriever]
type = SimplePOP3Retriever
 
[destination]
type = MDA_external
path = /usr/bin/exim
arguments = ("-i", "-bm", "user@localhost")
unixfrom = true"""
 
config = configparser.ConfigParser()
config.read_string(my_config)
 
cur  = conn.cursor() 
query = "SELECT user, passwd, server FROM pop"
cur.execute(query)
for idx, row in enumerate(cur, start=1):
    credentials = dict(zip(('username', 'password', 'server'), row))
    config['options'].update(credentials)
    with open(f'mail{idx}', 'w') as f:
        config.write(f)
and this was the output:
[options]
verbose = 1
read_all = false
delete = true
received = false
delivered_to = false
message_log = /home/mail/log
message_log_verbose = true
username = [email protected]
password = ******
server = pop.gmail.com

[retriever]
type = SimplePOP3Retriever

[destination]
type = MDA_external
path = /usr/bin/exim
arguments = ("-i", "-bm", "user@localhost")
unixfrom = true
i changed the double quotes to the deferent positions but no luck.
Reply
#7
look at line 27. You need to update that too, to update retriever section, not options.
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#8
Thanks for the help i just changed to update the retriever instead of option, now every thing is going ok.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Remove single and double quotes from a csv file in 3 to 4 column shantanu97 0 6,925 Mar-31-2021, 10:52 AM
Last Post: shantanu97
  How to remove empty struct from matlab file in python? python_newbie09 0 2,353 Jun-25-2019, 12:13 PM
Last Post: python_newbie09
  How to remove form feed from file gurbhej_singh 5 3,393 May-26-2019, 05:51 AM
Last Post: gurbhej_singh
  How to remove duplicates basis keys of a csv file Prince_Bhatia 2 3,401 Aug-09-2018, 10:57 AM
Last Post: Prince_Bhatia
  Remove extra lines from .csv file in comparison with another pedteles 1 2,960 Jun-08-2017, 04:09 PM
Last Post: nilamo

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020