当前位置: 首页 > 面试题库 >

从文件写入和读取列表

司徒经纶
2023-03-14
问题内容

这是一个有点奇怪的请求,但我正在寻找一种方法来将列表写入文件,然后再读回去。

我没有办法重新制作列表,以使它们如下面的示例所示正确地形成/格式化。

我的列表具有如下数据:

test
data
here
this
is one
group :)

test
data
here
this
is another
group :)

问题答案:

如果您不需要它是人类可读/可编辑的,则最简单的解决方案是使用pickle

来写:

with open(the_filename, 'wb') as f:
    pickle.dump(my_list, f)

读书:

with open(the_filename, 'rb') as f:
    my_list = pickle.load(f)

如果您 确实 需要使它们易于阅读,则我们需要更多信息。

如果my_list保证是没有嵌入换行符的字符串列表,则只需每行写一个:

with open(the_filename, 'w') as f:
    for s in my_list:
        f.write(s + '\n')

with open(the_filename, 'r') as f:
    my_list = [line.rstrip('\n') for line in f]

如果它们是Unicode字符串而不是字节字符串,则需要encode它们。(或者,更糟糕的是,如果它们是字节字符串,但不一定使用与系统默认设置相同的编码。)

如果它们可能包含换行符或不可打印的字符等,则可以使用转义或引号。Python在stdlib中内置了各种不同的转义。

让我们使用unicode-escape此处一次解决以上两个问题:

with open(the_filename, 'w') as f:
    for s in my_list:
        f.write((s + u'\n').encode('unicode-escape'))

with open(the_filename, 'r') as f:
    my_list = [line.decode('unicode-escape').rstrip(u'\n') for line in f]

您还可以在2.x中将3.x样式的解决方案与codecs模块或io模块一起使用:*

import io

with io.open(the_filename, 'w', encoding='unicode-escape') as f:
    f.writelines(line + u'\n' for line in my_list)

with open(the_filename, 'r') as f:
    my_list = [line.rstrip(u'\n') for line in f]
  • TOOWTDI,那么哪种方法是显而易见的?这取决于…对于简短版本:如果您需要使用2.6之前的Python版本,请使用codecs;如果不是,请使用io


 类似资料:
  • 问题内容: 我在文件中有以下JSON : 如何使用PHP 添加到文件中? 这是我到目前为止的内容: 这给了我一个致命错误:无法在此行上将stdClass类型的对象用作数组: 我正在使用PHP5.2。有什么想法吗?谢谢! 问题答案: 错误消息中的线索是-如果您查看文档以了解它可能需要第二个参数,该参数控制返回数组还是对象-它默认为object。 因此,将您的通话更改为 并且它将返回一个关联数组,您的

  • null 如果我的理解有误,请指正。还有以下问题: 我的理解是,Hadoop中的文件读/写没有任何并行性,它所能执行的最佳操作与传统的文件读或写(即,如果复制设置为1)+分布式通信机制中涉及的一些开销是一样的。 并行性仅在数据处理阶段通过Map Reduce提供,而不是在客户端读/写文件期间提供。

  • 问题内容: 我需要在文本文件中读写数据,但是还无法弄清楚该怎么做。 我在Swift的iBook中找到了此示例代码,但我仍然不知道如何写入或读取数据。 问题答案: 为了进行读写,您应该使用可写的位置,例如documents目录。以下代码显示了如何读写简单的字符串。您可以在操场上进行测试。 雨燕3.x-5.x 斯威夫特2.2 斯威夫特1.x

  • 问题内容: 我试图逐行读取文件,然后使用Node.js将其输出到另一个文件。 我的问题是由于Node.js的异步特性,行的顺序有时会混乱。 例如,我的输入文件就像:第1行第2行第3行 但是输出文件可能像:第1行第3行第2行 下面是我的代码。 任何想法将不胜感激,谢谢。 问题答案: 如果要编写同步代码,请仅使用同步功能: 对于异步方法,您可以编写类似

  • 我试图将json对象写入文件/从文件中读取json对象。json结构很复杂,是动态生成的。 对于较小的json对象,我只需将json转换为string,然后进行string写/读操作。当json太大时,这会导致内存不足问题。 如何将JSONObject直接流到文件中,并直接从文件中流回JSONObject?

  • 问题内容: 我必须阅读tomcat日志文件,并在一段时间(例如:一个小时)后再次读取该文件(仅针对新添加的内容),因此我创建了RandomAccessFile来记录我完成的最后一个位置并使用BufferedReader.readLine()方法。 但是,我发现有时我无法读取文件的整行。 例如,tomcat正在尝试编写以下内容(仅作为示例): 192.168.0.0本地主机/index.html .