python:以txt格式化的数据库e跳过第一行和前两列

时间:2013-08-19 21:46:11

标签: python csv python-3.x

我有e数据库正常txt名为DB.TXT(分隔符Tab只应用数字),如下所示:

Date        Id  I   II  III IV  V
17-jan-13   aa  47  56  7   74  58
18-jan-13   ab  86  2   30  40  75
19-jan-13   ac  72  64  41  81  80
20-jan-13   ad  51  26  43  61  32
21-jan-13   ae  31  62  32  25  75
22-jan-13   af  60  83  18  35  5
23-jan-13   ag  29  8   47  12  69

我想知道Python中用于跳过第一行(Date,I,II,III,IV,V)和前两列(Date和Id)的代码,同时阅读文本文件。 (数字残差应该做和和乘法等。)

阅读txt文件后,它将显示如下:

47 56 7 74 58

86 2 30 40 75

72 64 41 81 80

51 26 43 61 32

31 62 32 25 75

60 83 18 35 5

29 8 47 12 69

文件格式为txt,而非CSV。

3 个答案:

答案 0 :(得分:0)

使用csv module跳过第一行,只需调用next(f)即可推进文件迭代器。要跳过前两行,您可以使用row = row[2:]

import csv
with open(filename, 'rb') as f:
    next(f)   # skip the first line
    for row in csv.reader(f, delimiter='\t'):
        row = row[2:]        # skip the first two columns
        row = map(int, row)  # map the strings to ints

答案 1 :(得分:0)

如果您只想对行进行计算,则可以执行以下操作:

with open("data.txt") as fh:
    fh.next()
    for line in fh:
        line = line.split()  # This split works equally well for tabs and other spaces
        do_something(line[2:])

如果您的需求更复杂,最好使用像Pandas这样的库,它可以处理标题和标签列以及正则表达式分隔符,并且可以让您轻松访问列:

import pandas
data = pandas.read_csv("blah.txt", sep="\s+", index_col=[0,1])
data.values   # array of values as requested
data.sum()    # sum of each column
data.product(axis=1)    # product of each row
etc... 

sep是一个正则表达式,因为你说它并不总是\t,而index_col会产生前两列的列标签。

答案 2 :(得分:0)

“python中的代码”相当广泛。使用numpy,它是:

In [21]: np.genfromtxt('db.txt',dtype=None,skip_header=1,usecols=range(2,6))
Out[21]: 
array([[47, 56,  7, 74],
       [86,  2, 30, 40],
       [72, 64, 41, 81],
       [51, 26, 43, 61],
       [31, 62, 32, 25],
       [60, 83, 18, 35],
       [29,  8, 47, 12]])