使用Python中的CSV.Reader从.text文件中获取列

时间:2014-02-21 16:23:22

标签: python csv

我有一个看起来像这样的文本文件:

162.8008    EXP  Set primary_image image=stimulus/Faces/face046.jpg
162.8008    EXP  Set secondary_image image=stimulus/Scenes/scene57.jpg
162.8008    EXP  Set primary_image opacity=1.0
162.8008    EXP  Set secondary_image opacity=0.0
162.8008    EXP  Set stimulus_instr text=press for repeated faces

我已经这样读过了:

log_data = []

with open('../filename.log.txt', 'rb') as f:
    reader = csv.reader(f, delimiter = '\t')
    for row in reader:
        log_data.append(row)

当我说:

时,我想立即访问第三列
print log_data[2][:]

我已经返回了所有单行,例如:

['8.8093', 'EXP', 'Started presenting text_2']

当我切换时,改为:

print log_data[:][2]

我得到了同样的结果!我一直在尝试将它转换为一个numpy数组并使用.split()函数而没有运气。非常感谢任何专业知识 - 非常感谢!

4 个答案:

答案 0 :(得分:1)

怎么样

print [row[2] for row in log_data]

答案 1 :(得分:0)

如果您使用numpy,则以下内容应该没问题

#!/usr/bin/env python

import numpy as np

dat = np.genfromtxt('data.txt', delimiter='\t', dtype=str)
print dat[:,2]

结果:['Set' 'Set' 'Set' 'Set' 'Set']

这篇文章How to use numpy.genfromtxt when first column is string and the remaining columns are numbers?可能会有所帮助。

答案 2 :(得分:0)

这相当于写作

n = len(log_data[2] - 1
print log_data[2][0:n]

也就是说,您要告诉它打印第2行中的每个元素。如果您只想访问第3行,那么您需要使用

print log_data[2][3]

如果要循环数据

for row in log_data:
  # process row
  for col in row:
    # process each column

你提到的相反情况,log_data [:] [2],正在打印切片的第2行,相当于

n = len(log_data) - 1
print log_data[0:n][2]

答案 3 :(得分:0)

不需要Numpy,对于给定的数据集,我不明白为什么你会选择使用它。

def get_column(n, data):
    return [row[n] for row in data]

print(get_column(2, log_data))  # => ["Set", "Set", "Set", ...]