从.txt到.csv中选择数据列

时间:2010-08-07 05:46:23

标签: python text csv

我对python很新(更像是我过去一周只使用过它)。我的任务看起来很简单,但我很挣扎。我有几个大文本文件,每个文件都包含来自不同地区的许多数据列。我想从一个文本文件中获取数据,并仅提取我需要的数据列,并将其写入新的.csv文件。目前它们是制表符分隔符,但我希望输出以逗号分隔。

我有:

#YY  MM DD hh mm WVHT  SwH  SwP  WWH  WWP SwD WWD   MWD
#yr  mo dy hr mn    m    m  sec    m  sec  -  degT  degT
2010 07 16 17 00  0.5  0.5  5.0  0.3  4.0 SSE SSE   163
2010 07 16 16 00  0.6  0.5  5.9  0.3  3.8 SSE SSE   165
2010 07 16 15 00  0.5  0.5  6.7  0.3  3.6 SSE  SW   151
2010 07 16 14 00  0.6  0.5  5.6  0.3  3.8 SSE SSE   153

我只想保留:DD,WVHT和MWD

提前致谢, 哈珀

4 个答案:

答案 0 :(得分:2)

您需要更清晰地格式化此问题。 :)

查看python csv模块,用于从您现在存储的数据中编写csv文件:http://docs.python.org/library/csv.html

编辑:这是一些更好,更简洁的代码,基于评论+ csv模块:

import csv

csv_out = csv.writer(open('out.csv', 'w'), delimiter=',')

f = open('myfile.txt')
for line in f:
  vals = line.split('\t')
  # DD, WVHT, MWD
  csv_out.writerow(vals[2], vals[5], vals[12])
f.close()

答案 1 :(得分:0)

实现此目标的一种简单方法是使用标准库中的csv模块。

首先,创建一个CSVReader和一个CSVWriter对象:

>>> import csv
>>> csv_in = csv.reader(open('eggs.txt', 'rb'), delimiter='\t')
>>> csv_out = csv.writer(open('spam.csv', 'w'), delimiter=',')

然后将您想要的信息放入新的csv文件中。

>>> for line in csv_in:
...    csv_out.writerow(line[2], line[5], line[-1])

答案 2 :(得分:0)

其中一个问题似乎是您的所有数据都在一行上:

  

2010 07 16 17 00 0.5 0.5 5.0 0.3 4.0 SSE SSE 163 2010 07 16 16 00 0.6 0.5 5.9 0.3 3.8 SSE SSE 165 2010 07 16 15 00 0.5 0.5 6.7 0.3 3.6 SSE SW 151 2010 07 16 14 00 0.6 0.5 5.6 0.3 3.8 SSE SSE 153

如果是这种情况,您需要将输入线分开。如果你知道你的数据是正常的,那么你可能会偷偷摸摸地分开2010年:

f = open('data.txt')
for line in f:
    for portion in line.split(' 2010') #space is significant
    # write to csv

如果您的数据跨越多年,那么Python itertools模块可以非常方便。我经常发现自己使用grouper食谱。

import csv
from itertools import izip_longest

csv_writer = csv.writer(open('eggs.csv', 'wb'), delimiter=',')

def grouper(n, iterable, fillvalue=None):
  """
  >>> grouper(3, 'ABCDEFG', 'x')
  ['ABC', 'DEF', 'Gxx']
  """
  args = [iter(iterable)] * n
  return izip_longest(fillvalue=fillvalue, *args)

f = open('spam.txt')
for line in grouper(22, f.split('\t')): 
    csv_writer.writerow(line[2], line[12])

答案 3 :(得分:0)

这是一个基本的东西,因为它是一个基本的需求,因为没有广泛使用csv,这里是一个没有csv模块的片段。

DD = 2
WVHT = 5
MWD = 12
INPUT = "input.txt"
OUTPUT = "output.csv"

from os import linesep

def main():
    t = []
    fi = open(INPUT)
    fo = open(OUTPUT, "w")
    try:
        for line in fi.xreadlines():
            line = line.split()
            t.append("%s,%s,%s" %(line[DD], line[WVHT], line[MWD]))
        fo.writelines(linesep.join(t))
    finally:
        fi.close()
        fo.close()

if __name__ == "__main__":
    main()
相关问题