Записать значение новой строки в файл Python без новой строки - PullRequest
0 голосов
/ 06 декабря 2018

У меня немного странный вопрос, но я пытаюсь решить проблему, с которой столкнулся.У меня есть скрипт Python, который записывает другой хранимый скрипт Python в новый файл.Проблема в том, что сценарий, который он пишет, содержит значения новой строки (\ n.) Вместо записи \ n он помещает его в новую строку.Любой способ обойти это?

f = open('email.py','r+')
readcontent = f.read()
f.seek(0, 0)
f.write('''\
def sendemail(from_addr, to_addr_list, cc_addr_list, subject, message, login, password, smtpserver='smtp.gmail.com:587'):
    header  = 'From: %s\n' % from_addr
    header += 'To: %s\n' % ','.join(to_addr_list)
    header += 'Cc: %s\n' % ','.join(cc_addr_list)
    header += 'Subject: %s\n' % subject
    message = header + message

    server = smtplib.SMTP(smtpserver)
    server.starttls()
    server.login(login,password)
    problems = server.sendmail(from_addr, to_addr_list, message)
    server.quit()
''')    
f.close()

Я пробовал это, но это не сработало:

f = open('email.py','r+',newline=None)

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Если вы не хотите, чтобы Python обрабатывал символ обратной косой черты в строковом литерале, добавьте к нему префикс r:

f.write(r'''
...
''')
0 голосов
/ 06 декабря 2018

Попробуйте replace \n до \\n

f = open('email.py','r+')
readcontent = f.read()
f.seek(0, 0)
f.write('''\
def sendemail(from_addr, to_addr_list, cc_addr_list, subject, message, login, password, smtpserver='smtp.gmail.com:587'):
    header  = 'From: %s\n' % from_addr
    header += 'To: %s\n' % ','.join(to_addr_list)
    header += 'Cc: %s\n' % ','.join(cc_addr_list)
    header += 'Subject: %s\n' % subject
    message = header + message

    server = smtplib.SMTP(smtpserver)
    server.starttls()
    server.login(login,password)
    problems = server.sendmail(from_addr, to_addr_list, message)
    server.quit()
'''.replace('\n', '\\n'))    
f.close()
0 голосов
/ 06 декабря 2018

Попробуйте избежать обратной косой черты.Прямо сейчас ваша обратная косая черта экранирует символы «n», поэтому она интерпретируется как новая строка.Вы хотите снова избежать всего этого, так что вы получите, например:

    header  = 'From: %s\\n' % from_addr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...