write字符串python_Python-write()与writelines()和连接字符串

为什么我不能在write()中为换行使用字符串,但在writelines()中可以使用它?

想法如下:如果你想写一个字符串,你可以用write()来完成。如果有一个字符串序列,可以使用writelines()将它们全部写入。

write(arg)需要一个字符串作为参数并将其写入文件。如果提供字符串列表,它将引发异常(顺便说一下,向我们显示错误!)。

writelines(arg)需要一个iterable作为参数(iterable对象可以是元组、列表、字符串或最一般意义上的迭代器)。迭代器中包含的每个项都应该是一个字符串。你提供的是一组字符串,所以一切正常。

字符串的性质对这两个函数都不重要,也就是说,它们只是将您提供的任何内容写入文件。有趣的是writelines()本身不添加换行符,因此方法名实际上可能相当混乱。它的行为实际上类似于一个名为write_all_of_these_strings(sequence)的虚方法。

下面是Python中的一种惯用方法,它将字符串列表写入文件,同时将每个字符串保持在自己的行中:lines = ['line1', 'line2']

with open('filename.txt', 'w') as f:

f.write('\n'.join(lines))

这会帮你关闭文件。构造'\n'.join(lines)连接(连接)列表中的字符串lines,并使用字符'\n'作为粘合剂。它比使用+运算符更有效。

从相同的lines序列开始,以相同的输出结束,但使用writelines():lines = ['line1', 'line2']

with open('filename.txt', 'w') as f:

f.writelines("%s\n" % l for l in lines)

这将使用生成器表达式并动态创建以换行符结尾的字符串。writelines()遍历这个字符串序列并写入每个项。

编辑:您应该注意的另一点:

在介绍writelines()之前就存在write()和readlines()。writelines()后来作为readlines()的对应项引入,这样就可以轻松地编写通过readlines()读取的文件内容:outfile.writelines(infile.readlines())

实际上,这是writelines有这么一个令人困惑的名字的主要原因。而且,今天,我们真的不想再使用这种方法了。readlines()在writelines()开始写入数据之前,将整个文件读取到计算机的内存中。首先,这可能会浪费时间。为什么不在读取其他部分的同时开始写入部分数据呢?但是,最重要的是,这种方法会消耗大量的内存。在一个极端的场景中,当输入文件大于机器的内存时,这种方法甚至不起作用。解决这个问题的方法是只使用迭代器。一个有效的例子:with open('inputfile') as infile:

with open('outputfile') as outfile:

for line in infile:

outfile.write(line)

这将逐行读取输入文件。一旦读取一行,该行就被写入输出文件。从原理上讲,内存中始终只有一行(在readlines/writelines方法中,与内存中的整个文件内容相比)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值