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

将文件字符串读入数组(以pythonic方式)

越嘉茂
2023-03-14
问题内容

我正在从文件中读取行,然后使用它们。每行仅由浮点数组成。

我整理了几乎所有内容,将这些行转换为数组。

我基本上是这样做的(pseudopython代码)

 line=file.readlines()
 line=line.split(' ') # Or whatever separator
 array=np.array(line)
 #And then iterate over every value casting them as floats
      newarray[i]=array.float(array[i])

这行得通,但是似乎有点违反直觉和反pythonic,我想知道是否有更好的方法来处理来自文件的输入,以使最后有一个充满浮点数的数组。


问题答案:

快速回答:

arrays = []
for line in open(your_file): # no need to use readlines if you don't want to store them
    # use a list comprehension to build your array on the fly
    new_array = np.array((array.float(i) for i in line.split(' '))) 
    arrays.append(new_array)

如果您经常处理此类数据,csv模块将有所帮助。

import csv

arrays = []
# declare the format of you csv file and Python will turn line into
# lists for you 
parser = csv.reader(open(your_file), delimiter=' '))
for l in parser: 
    arrays.append(np.array((array.float(i) for i in l)))

如果您感到疯狂,甚至可以使用完全声明的形式:

import csv

parser = csv.reader(open(your_file), delimiter=' '))
make_array = lambda row : np.array((array.float(i) for i in row)) 
arrays = [make_array(row) for row in parser]

而且,如果您确实希望同事讨厌您,则可以制作一个衬板(一点也不PYTHONIC :-):

arrays = [np.array((array.float(i) for i in r)) for r in csv.reader(open(your_file), delimiter=' '))]

剥去所有的锅炉板和灵活性,您可以得到一个干净且易于阅读的衬里。我不会使用它,因为我喜欢使用的潜在潜力csv,但是它足够好。这里是一个灰色区域,所以我不会说这是Pythonic,但是绝对方便。

arrays = [np.array((array.float(i) for i in l.split())) for l in open(your_file))]


 类似资料:
  • 问题内容: 我认为能够将文本文件读入和写出字符串数组的能力是相当普遍的要求。从一种语言开始消除最初访问数据库的需求时,它也非常有用。Golang中是否存在? 例如 和 我宁愿使用现有的而不是重复的。 问题答案: 从Go1.1版本开始,有一个bufio.Scanner API可以轻松读取文件中的行。考虑上面的以下示例,该示例使用Scanner重写:

  • 我有一个名为的文件,它看起来像这样: 我想把那个文件作为字符串数组读入。这实际上在一个包中起作用: 我已经检查了每个导入,每个导入都被导入文件以外的其他东西使用。 在另一个包中,它忽略字符串插值: 在控制台中生成此输出: 唯一提到该文件的是 但是,将其复制到

  • 问题内容: 我有一个如下的文本文件。我想读取给定值作为浮动列表。之后,我将进行一些计算。我使用了拆分功能和转换来浮动。但是我不能转换第一个和最后一个,因为这两个都有方括号。([])。它给出了如下错误。 文件格式 错误 我使用的代码 任何人都可以给我一个想法,如何将这些值读入如下所示的float数组中。 然后我可以调用X [1],X [999]之类的值 问题答案: 用于将每一行解析为浮点数列表: 每

  • 问题内容: 这一定很明显,但我无法弄清楚。我为此花了将近一整天。我很乐意给减轻我体重的人买啤酒。 这是我的代码。我看到字节数组大小不合适,但是我找不到正确的大小。除此之外,内容也不是不正确的。似乎只有文字字符可以。 似乎从二进制文件中删除数据确实很痛苦,我真的很沮丧。 还有一件事:文件内容不是文本,可以是图片,视频或pdf之类的东西。 问题答案: 如果你正在读一个二进制文件,你应该 不 尝试把它当

  • 问题内容: 将两个字符串网格化的最Python方式是什么? 例如: 输入: 输出: 问题答案: 对我来说,最pythonic *的方式是以下代码,它 几乎做同样的事情, 但是使用运算符来连接每个字符串中的各个字符: 它也比使用两个调用更快: 存在更快的方法,但是它们常常使代码模糊。 注: 如果两个输入字符串是 不 相同的长度,则较长的一个将被截断, 停在较短字符串的结尾迭代。在这种情况下,应该使用

  • 问题内容: 嗨,我想读取N行的txt文件,并将结果放入字符串数组中。 问题答案: 使用和。