Python 中的写入行
本教程将介绍和解释 Python 中 write()
和 writelines()
方法之间的区别。
在 Python 中使用 write()
和 writelines()
方法将指定文本写入文件
write()
方法需要一个字符串作为参数并将其写入文件。如果我们提供一个字符串列表,它将引发异常。writelines()
方法需要一个可迭代的参数。此外,write()
方法显示输出但不提供换行符,而 writelines()
方法显示输出并在字符串末尾提供换行符。重要的是要注意 writelines()
不会在迭代中的每个项目后自动插入一个新行。我们必须自己提供一条新线路。如果我们有很多行要写入文件,writelines()
可能是更好的选择。它表现良好,因为它不创建临时连接字符串,只是遍历行。
在下面的程序中,我们以写模式打开了文件 samplefile.txt
。lines
变量是一个元组,即一个不可变的字符串集合。当我们尝试执行程序时,它引发了异常类型的错误。我们提供给 write()
方法的参数是一个导致错误的元组。在这里,我们使用 with
方法进行文件处理。此方法提供了更好的语法和异常处理。因此,在适用的情况下使用 with
方法是一种很好的做法。该方法很有用,因为任何打开的文件都将在完成后关闭。
示例代码:
# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines = line1, nl, line2, nl, line3, nl
with open('samplefile.txt', 'w') as f:
f.write(lines)
输出:
TypeError: write() argument must be str, not tuple
在类似的上下文中,当我们使用 writelines()
时,程序会成功执行,并创建一个名为 samplefile.txt
的文件,其中 lines
作为参数传递给 writelines()
方法。
示例代码:
# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines = line1, nl, line2, nl, line3, nl
with open('samplefile.txt', 'w') as f:
f.writelines(lines)
输出:
Good
Morning
Sunshine
对于同一个程序,多行连接到一个名为 lines_joined
的字符串变量,它很容易被接受为 write()
方法的参数。
示例代码:
# python 3.x
nl = "\n"
line1 = "Good"
line2 = "Morning"
line3 = "Sunshine"
lines_joined = line1 + nl + line2 + nl + line3 + nl
with open('samplefile.txt', 'w') as f:
f.write(lines_joined)
输出:
Good
Morning
Sunshine
在 Python 中使用 write()
和 writelines()
方法将可迭代对象写入文件
join()
方法获取可迭代对象中的所有项目并将它们连接成一个字符串。在下面的程序中,我们使用了 join()
方法和 '\n'
作为粘合剂来连接 lines
中的字符串。这是一种更好的串联方法,而不是使用 +
运算符。
示例代码:
# python 3.x
lines = ["Hello", "World"]
with open('hello.txt', 'w') as f:
f.write('\n'.join(lines))
输出:
Hello
World
对极长的字符串列表使用 join()
方法效率较低。在这种情况下,会在写入之前在内存中创建一个全新的非常长的字符串。因此,在下面的程序中,我们使用生成器表达式将字符串写入换行符。在这里,数据是分段写入的。
示例代码:
# python 3.x
lines = ["Hello", "World"]
with open('hello.txt', 'w') as f:
for l in lines:
f.write('%s\n' % l)
输出:
Hello
World
与上面相同的程序是通过 writelines()
方法实现的。它使用生成器表达式并动态创建以换行符结尾的字符串。writelines()
方法迭代这个字符串序列并写入每个项目。
示例代码:
# python 3.x
lines = ["Hello", "World"]
with open('hello.txt', 'w') as file:
file.writelines("%s\n" % t for t in texts)
输出:
Hello
World