在Python中将'\ n'添加到打开文件的每一行

时间:2015-05-28 09:18:12

标签: python

我有一些东西要用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之后)是我做过的测试之一。按照这种方式不是必须的.​​.....

如果有人可以帮助我吗?

由于

2 个答案:

答案 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