how to remove \n from file? - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: how to remove \n from file? (/thread-32329.html) |
how to remove \n from file? - shams - Feb-03-2021 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. RE: how to remove \n from file? - bowlofred - Feb-03-2021 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: Get rid of the leading whitespace. RE: how to remove \n from file? - buran - Feb-03-2021 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. RE: how to remove \n from file? - shams - Feb-04-2021 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 RE: how to remove \n from file? - buran - Feb-04-2021 (Feb-04-2021, 07:00 AM)shams Wrote: i tried to add these lines to the code but failedC'mon, it couldn't be that difficult. Show what have you tried RE: how to remove \n from file? - shams - Feb-04-2021 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 = truei changed the double quotes to the deferent positions but no luck. RE: how to remove \n from file? - buran - Feb-04-2021 look at line 27. You need to update that too, to update retriever section, not options .
RE: how to remove \n from file? - shams - Feb-04-2021 Thanks for the help i just changed to update the retriever instead of option, now every thing is going ok. |