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

2024-04-27 18:02:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从文件中读取行,然后再与它们一起工作。每一行仅由浮点数组成。

我把几乎所有的东西都整理好了,以便把行转换成数组。

基本上是这样(伪python代码)

 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])

这是可行的,但似乎有点违反直觉和反ythonic,我想知道是否有更好的方法来处理文件中的输入,使其结尾有一个满是浮点数的数组。


Tags: orand代码npline数组array整理
3条回答

快速回答:

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]

如果你真的想让你的同事讨厌你,你可以做一个单行本(一点也不是Python):

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

剥离所有的锅炉板和灵活性,你可以结束一个干净和相当可读的一行。我不想使用它,因为我喜欢使用csv的重构潜力,但它可以很好。这是一个灰色地带,所以我不认为它是Python,但它确实很方便。

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

If you want a numpy array and each row in the text file has the same number of values

a = numpy.loadtxt('data.txt')

没有纽比:

with open('data.txt') as f:
    arrays = list(csv.reader(f, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC))

Or just

with open('data.txt') as f:
    arrays = [map(float, line.split()) for line in f]

以下几点怎么样:

import numpy as np

arrays = []
for line in open('data.txt'):
  arrays.append(np.array([float(val) for val in line.rstrip('\n').split(' ') if val != '']))

相关问题 更多 >