所以我在学Python。我正在复习课程,遇到了一个问题,我不得不将大量的target.write()
压缩成一个write()
,同时在每个用户输入变量(即write()
的对象)之间有一个"\n"
。
我想到了:
nl = "\n"
lines = line1, nl, line2, nl, line3, nl
textdoc.writelines(lines)
如果我想这样做:
textdoc.write(lines)
我得到一个错误。但如果我输入:
textdoc.write(line1 + "\n" + line2 + ....)
那就行了。为什么我不能在write()
中使用字符串作为换行符,但我可以在writelines()
中使用它?
Python2.7 当我在google上搜索时,我发现大多数资源都超出了我的想象,我仍然是个普通人。
如果只想保存和加载列表,请尝试Pickle
泡菜保存:
以及装载:
为什么我不能在write()中为换行使用字符串,但在writelines()中可以使用它?
想法如下:如果你想写一个字符串,你可以用
write()
来完成。如果有一个字符串序列,可以使用writelines()
将它们全部写入。write(arg)
需要一个字符串作为参数并将其写入文件。如果提供字符串列表,它将引发异常(顺便说一下,向我们显示错误!)。writelines(arg)
需要一个iterable作为参数(iterable对象可以是元组、列表、字符串或最一般意义上的迭代器)。迭代器中包含的每个项都应该是一个字符串。你提供的是一组字符串,所以一切正常。字符串的性质对这两个函数都不重要,也就是说,它们只是将您提供的任何内容写入文件。有趣的是
writelines()
本身不添加换行符,因此方法名实际上可能相当混乱。它的行为实际上类似于一个名为write_all_of_these_strings(sequence)
的虚方法。下面是Python中的一种惯用方法,它将字符串列表写入文件,同时将每个字符串保持在自己的行中:
这会帮你关闭文件。构造
'\n'.join(lines)
连接(连接)列表中的字符串lines
,并使用字符'\n'作为粘合剂。它比使用+
运算符更有效。从相同的
lines
序列开始,以相同的输出结束,但使用writelines()
:这将使用生成器表达式并动态创建以换行符结尾的字符串。
writelines()
遍历这个字符串序列并写入每个项。编辑:您应该注意的另一点:
在介绍
writelines()
之前就存在write()
和readlines()
。writelines()
后来作为readlines()
的对应项引入,这样就可以轻松地编写通过readlines()
读取的文件内容:实际上,这是
writelines
有这么一个令人困惑的名字的主要原因。而且,今天,我们真的不想再使用这种方法了。readlines()
在writelines()
开始写入数据之前,将整个文件读取到计算机的内存中。首先,这可能会浪费时间。为什么不在读取其他部分的同时开始写入部分数据呢?但是,最重要的是,这种方法会消耗大量的内存。在一个极端的场景中,当输入文件大于机器的内存时,这种方法甚至不起作用。解决这个问题的方法是只使用迭代器。一个有效的例子:这将逐行读取输入文件。一旦读取一行,该行就被写入输出文件。从原理上讲,内存中始终只有一行(在readlines/writelines方法中,与内存中的整个文件内容相比)。
writelines
需要一个iterable字符串write
需要单个字符串。line1 + "\n" + line2
在传递给write
之前,将这些字符串合并为一个字符串。请注意,如果有许多行,则可能需要使用
"\n".join(list_of_lines)
。相关问题 更多 >
编程相关推荐