导入包含日期,时间和数据点的文本文件,并绘制到Matplotlib中

时间:2017-01-21 00:13:25

标签: python numpy matplotlib

我是UMD实验室的研究助理,我在编写工作时遇到了麻烦。我正在运行python 2.7.12 w / Anaconda 4.2.0。我得到了一个文本文件,其任务是将其读入python并使用matplotlib绘制图形。文本文件采用这种格式

  

20170109 001203 379.00 22824.13 1.00

可以忽略最后两列,第一列是日期,第二列是HH:MM:SS中的时间。第三列是ppm (parts per million)

我已经能够将数据读入python,但还没弄清楚如何将前两列区分为日期和时间。我正在考虑使用datetime做一些事情,但我不确定应该使用什么输入。从那里开始,我想在x轴上绘制数据(yyyy MMM ddddHH MM SS),在y轴上绘制ppm,使用matplotlib通过numpy。

3 个答案:

答案 0 :(得分:1)

要获得输入的有趣部分,可以切片输入字符串

input = '20170109 001203 379.00 22824.13 1.00'

input_date = input[:15]
print(input_date)

input_ppm = input[16:23]
print(input_ppm)

稍后,使用strptime函数将字符串解析为日期与时间。

import datetime
dt = datetime.datetime.strptime(input_date, '%Y%m%d %H%M%S')
print(dt)

现在您可以使用dt作为x轴点。要查看如何在Matplotlib中使用日期,您可以查看此Matplotlib example

祝你好运!

修改 要使用多行读取文件,可以使用readlines()创建列表。您可以遍历该列表以提取每一行并将其解析为日期和&时间。

现在整个代码将如下所示:

import datetime

with open('filename.txt') as f:
    content = f.readlines()
# content is now a list of text line strings

# remove whitespaces, e.g. newline character
content = [x.strip() for x in content] 

for input in content:
    input_date = input[:15]
    print(input_date)

    input_ppm = input[16:23]
    print(input_ppm)

    dt = datetime.datetime.strptime(input_date, '%Y%m%d %H%M%S')
    print(dt)

答案 1 :(得分:0)

假设所有日期字符串都具有相同的格式......

from datetime import datetime

input = "20170109 001203 379.00 22824.13 1.00"

list = input.split(" ") #Split the input into parts where blank space is the delimiter
date_and_time = str([' '.join(list[:2])]) #Merge the first item with the second and convert to string
#Insert all the white spaces we need to then convert to date time object
date_and_time = date_and_time[2:6]+' '+date_and_time[6:8]+' '+date_and_time[8:10]+' '+date_and_time[11:13]+' '+date_and_time[13:15]+' '+date_and_time[15:-2]

datetime_object = datetime.strptime(date_and_time, '%Y %m %d %H %M %S')
print (datetime_object)

这很棘手的原因是因为你需要以某种方式区分你的字符串时不同的时间单位 - >日期转换。代码非常粗糙,但它应该为您的问题提供一些见解。

答案 2 :(得分:0)

我首先要分割文本文件:

text = '20170109 001203 379.00 22824.13 1.00'
texts = text.split(" ")
print(texts)

然后你可以用日期一点一点地提取它:

date = datetime.strptime(texts[0], '%Y%m%d')
print("The day is {}".format(date.day))
time = datetime.strptime(texts[1], '%H%M%S')
print("The minute is {}".format(time.minute))
ppm = texts[2]
print("ppm is {}".format(ppm))

如果你陷入密谋,你应该开启一个新问题。我建议你去http://matplotlib.org/gallery.html并点击你喜欢的情节。它将提供您需要的所有代码。