Python:如何读取文件并在数组中存储某些列

时间:2016-01-04 07:29:42

标签: python arrays list file io

我正在从文件中读取数据集(由空格分隔)。我需要存储数组data中最后一列以及数组target中最后一列的所有列。

你能指导我如何继续前进吗?

到目前为止我所拥有的:

with open(filename) as f:
    data = f.readlines()

或者我应该逐行阅读?

PS:列的数据类型也不同。

修改:示例数据

faban       1   0   0.288   withspy
faban       2   0   0.243   withoutspy
simulated   1   0   0.159   withoutspy
faban       1   1   0.189   withoutspy

4 个答案:

答案 0 :(得分:7)

这样可行:

data = []
target = []
with open('faban.txt') as fobj:
    for line in fobj:
        row = line.split()
        data.append(row[:-1])
        target.append(row[-1])

现在:

>>> data
[['faban', '1', '0', '0.288'],
 ['faban', '2', '0', '0.243'],
 ['simulated', '1', '0', '0.159'],
 ['faban', '1', '1', '0.189']]

>>> target
['withspy', 'withoutspy', 'withoutspy', 'withoutspy']

答案 1 :(得分:2)

我认为numpy在这里有一个干净,简单的解决方案。

>>> import numpy as np
>>> data, target = np.array_split(np.loadtxt('file', dtype=str), [-1], axis=1)

结果:

>>> data.tolist()
[['faban', '1', '0', '0.288'], 
 ['faban', '2', '0', '0.243'], 
 ['simulated', '1', '0', '0.159'], 
 ['faban', '1', '1', '0.189']]
>>> target.flatten().tolist()
['withspy', 'withoutspy', 'withoutspy', 'withoutspy']

答案 2 :(得分:2)

您可以使用pandas使用read_table来阅读您的数据,iloc来对您的数据进行分组,values从DataFrame和tolist获取值将numpy数组转换为list的方法:

import pandas as pd
df = pd.read_table('path_to_your_file', delim_whitespace=True, header=None)
print(df)
           0  1  2      3           4
0      faban  1  0  0.288     withspy
1      faban  2  0  0.243  withoutspy
2  simulated  1  0  0.159  withoutspy
3      faban  1  1  0.189  withoutspy


data = df.iloc[:,:-1].values.tolist()
target = df.iloc[:,-1].tolist()

print(data)
[['faban', 1, 0, 0.28800000000000003],
 ['faban', 2, 0, 0.243],
 ['simulated', 1, 0, 0.159],
 ['faban', 1, 1, 0.18899999999999997]]

print(target)
['withspy', 'withoutspy', 'withoutspy', 'withoutspy']

答案 3 :(得分:0)

以下效果很好:

data = open('<FILE>', 'r').read().split('\n')
out = []
for l in data:
    out.append([e for e in l.split(' ') if e])
然后

out 的格式为 [['faban','1','0','0.288','withspy'],[...]。 ..] (注意,所有元素都是字符串)