0

对不起,如果以前有人问过这个问题,我找不到任何东西。

我正在尝试定义一个函数,该函数采用任意数量的 .txt 文件,这些文件看起来像这样

在此处输入图像描述

读取它们,连接所有行并将其保存到一个 numpy 数组中。这适用于一个 .txt 文件。一旦我使用两个文件,我就会得到array([nan, nan])三个文件array([nan, nan, nan]),等等。

import numpy as np

def readInSpectra(*files):
    raw = np.genfromtxt(files[0], skip_header=0, delimiter='\t')
    for i in range(1, len(files)):
        raw_i = np.genfromtxt(files[i], skip_header=0, delimiter='\t')
        raw = np.vstack((raw, raw_i))
    return raw

files = ('./file1.txt', './file2.txt', './file3.txt')

test = readInSpectra(files)
4

2 回答 2

1

两者都应该工作,我建议你按照@obchardon 的建议做第二个

import numpy as np


def readInSpectra_0(*files):
    files = files[0]
    raw = np.genfromtxt(files[0], skip_header=0, delimiter='\t')
    for i in range(1, len(files)):
        raw_i = np.genfromtxt(files[i], skip_header=0, delimiter='\t')
        raw = np.vstack((raw, raw_i))
    return raw

def readInSpectra_1(files):
    
    stacking = tuple(np.genfromtxt(file, skip_header=0, delimiter='\t')
                     for file in files)

    return np.vstack(stacking)

#files = ('file1.txt', 'file2.txt')
files = ('./file1.txt', './file2.txt', './file3.txt')


test = readInSpectra_1(files)
于 2020-09-30T13:22:40.180 回答
1

我不完全确定,但我认为重复vstack是一个问题,因为数组的形状发生了变化。你有没有尝试过:

def readInSpectra(*files):
    
    stacking = tuple(np.genfromtxt(file, skip_header=0, delimiter='\t')
                     for file in files)

    return np.vstack(stacking)

编辑:我认为你应该这样调用函数

test = readInSpectra(*files)

或者

test = readInSpectra('./file1.txt', './file2.txt', './file3.txt')
于 2020-09-30T13:20:07.960 回答