我有一些东西要用Python发送邮件,我想在邮件正文中添加内容文件。
问题是在每一行添加'\n'
...我已经做了一些测试,但每次将'\n'
放在每个字母之后而不是行...
这是要添加到邮件的文件(tests.new):
// Files Module
// Module Name
test.cpp
test2.cpp
这是我的剧本:
#!/usr/bin/env python3
newFile = open('tests.new','r')
tNew = newFile.read()
# mail
mail = open('mail.txt', 'w', encoding='utf8')
mail.write("New files in module \n")
# BAD PART
i = len(tNew)
z = 0
while z < i:
mail.write(str(tNew[z].split('\n')))
z += 1
mail.close()
脚本的结尾(在#BAD PART
之后)是我做过的测试之一。按照这种方式不是必须的......
如果有人可以帮助我吗?
由于
答案 0 :(得分:3)
您的问题是newFile.read()
读取整个输入文件。然后,在while
循环中逐字节地迭代它,并在每个char后面添加换行符。
使用for line in newFile:
节迭代输入文件中的行。
您mail.close()
的位置也不正确。最好使用with open("somefile.txt") as ifile:
节,因为它会在块结束后处理正确的文件关闭。
#!/usr/bin/env python3
with open('tests.new','r') as newFile: #this autocloses the file at the end of the block
with open('mail.txt', 'w', encoding='utf8') as mail: #same
mail.write("New files in module \n")
for line in newFile: #iterate over lines in the inputfile instead of over characters
mail.write("{}\n".format(line))
答案 1 :(得分:0)
BAD PART问题:
1)tNew[z]
返回单个字符,而不是行。你需要先获得行列表。
2)您在循环中关闭mail
文件,而不是再次打开它。
所以正确的代码必须是:
#!/usr/bin/env python3
newFile = open('tests.new','r')
tNew = newFile.read()
# mail
mail = open('mail.txt', 'w', encoding='utf8')
mail.write("New files in module \n")
# BAD PART - FIXED
lines = tNew.split('\n')
i = len(lines)
z = 0
while z < i:
mail.write(str(lines[z] + '\n'))
z += 1
mail.close()
newFile.close()
但是我建议你用Pythonic的方式重写这段代码:
for line in tNew.split('\n'):
mail.write(line + '\n')
或更好:
for line in open('tests.new', 'r'):
mail.write(line + '\n')
您不需要使用z
计数器和i
。