Python ASCII读表

时间:2016-09-07 15:51:02

标签: python ascii

我真的很抱歉提出可能是愚蠢的问题,但我已经花了半天时间找不到合理的解决方案。 我有ASCII文件:

      "X"           "Z"             "Y"
   285807.2      -1671.056        2405.91
   285807.2      -1651.162       2394.932
   285807.2      -1631.269       2383.962
   285807.2      -1611.375       2372.988
   285807.2      -1591.481        2362.01
   285807.2      -1571.587       2351.01

............................................. 〜1 000 000行

我正常地阅读它:

from astropy.io import ascii

data =ascii.read('C:\\Users\\Protoss\\Desktop\\Ishodnik1.dat')
print (data)

但我怎么能处理列?例如,对每行进行求和或仅从列Z和Y得到平均值等?据我所知,我必须将我的所有日​​期转换为浮动值列表除了标题,然后写入新的ASCII文件,不是吗?

2 个答案:

答案 0 :(得分:0)

我做了什么。我将列分开并添加到不同的列表中。现在我可以访问不同的列:

import numpy as np
    with open('C:\\Users\\Protoss\\Desktop\\Ishodnik.dat' ,'r') as f:
        header1 = f.readline()    
        X_list=[]
        Z_list=[]
        V_list=[]
        for line in f:
            line = line.strip()
            columns = line.split()
            X = (float(columns[0]))
            Z = (float(columns[1]))
            V = (float(columns[2]))
            X_list.append(X)
            Z_list.append(Z)
            V_list.append(V)

答案 1 :(得分:0)

可以将文件视为CSV并使用Sniffer自动检测格式:

import csv

with open('C:\\Users\\Protoss\\Desktop\\Ishodnik1.dat', 'r') as f:
    # Sniff to autodetect the format
    dialect = csv.Sniffer().sniff(f.read(1024))
    f.seek(0)
    reader = csv.reader(f, dialect)

    # Read line by line and store as list of tuples
    data = []
    header = tuple(next(reader))
    for row in reader:
        data.append(tuple(row))