在strptime Python之后重新格式化日期

时间:2015-07-28 19:11:34

标签: python datetime

我正在尝试从.txt文件中读取两列并重新格式化它们。第一列是日期,格式为:%Y-%m-%d %H:%M:%S。第二列是降水值,我需要操纵它。最后,我需要制作另一个制表符分隔的.txt文件,其中包含一个包含日期的列,一个包含小时的列,一个包含分钟的列和一个包含precipitation*0.2的列。我的代码如下:

#read in file
def readfiles(file_list):
    data = []
    for fname in file_list:
        data.append(
                    np.genfromtxt(fname,
                               usecols=(0,5),
                               comments='#',    # skip comment lines
                               delimiter='\t',
                               dtype="|S", autostrip=True).T)
    return data
data = readfiles(['soundTransit1_remote_rawMeasurements_15m.txt'])

np.set_printoptions(threshold=np.nan)

#create array containing desired precipitation values
precip = np.array(data, dtype='|S4')[:,1]
precip = precip.astype(np.float)
precip_mm = precip * 0.2

#strip date and time
for i,d in enumerate(data):
    x = [dt.datetime.strptime(date,'%Y-%m-%d %H:%M:%S') for date in d[0]]

我已经走到了这一步,但变量' x'印刷时看起来像这样:

[datetime.datetime(2015, 7, 11, 13, 30), datetime.datetime(2015, 7, 11, 13, 45), datetime.datetime(2015, 7, 11, 14, 0),

我不确定如何使用此输出并创建我需要的.txt文件。我也可能完全过于复杂,所以我愿意接受如何从头开始重新启动整个过程的建议。

3 个答案:

答案 0 :(得分:2)

datetime.datetime个对象具有dayhourminute属性,您可以使用这些属性获取相应的信息 -

演示 -

>>> import datetime
>>> d = datetime.datetime(2015, 7, 11, 13, 30)
>>> d.day
11
>>> d.hour
13
>>> d.minute
30

我认为使用numpy模块可能实在是太过分了,你可以轻松地使用csv模块。

代码 -

import csv
import datetime
with open('test.txt','r') as infile, open('output.txt','w') as outfile:
    inr = csv.reader(infile,delimiter='\t')
    ouw = csv.writer(outfile,delimiter='\t')
    for row in inr:
            d = datetime.datetime.strptime(row[0],'%Y-%m-%d %H:%M:%S')
            p = float(row[1])
            nr = [d.day, d.hour, d.minute, p*0.2]
            ouw.writerow(nr)

演示 -

test.txt看起来像 -

2015-07-29 12:40:22    1
2015-07-28 17:40:22    2
2015-07-27 08:22:22    3
2015-07-24 12:40:22    4

此csv上面的代码生成output.txt为 -

29    12    40    0.2

28    17    40    0.4

27    8    22    0.6000000000000001

24    12    40    0.8

答案 1 :(得分:0)

p中的strptime代表parse - 您需要strftime。祝你好运 - 我每次都要仔细查看。 :(

答案 2 :(得分:0)

如果您只想将数据写入另一个文件,可以使用datetime和csv模块完成所有操作:

import csv
from datetime import datetime

with open("in.txt") as f, open("out.txt", "w") as out:
    wr = csv.writer(out,delimiter="\t")
    r = csv.reader(f,delimiter="\t")
    # write header
    wr.writerow(["Day", "Hour", "Min", "Prec"])
    for row in r:
        # unpack the row getting date and precip value from input file
        tme, pre = row
        # create datetime object 
        dt = datetime.strptime(tme, "%Y-%m-%d %H:%M:%S")
        # get the day, hour, minute from the datetime object
        # multiply the precip value by .2 and write the row
        wr.writerow([dt.day, dt.hour, dt.minute,float(pre)*.2])

如果您希望完整的工作日名称使用dt.strftime("%A"),则缩写的工作日为"%a",因为代码会将日期写为小数。 如果输入文件有标题,请不要忘记在文件对象上调用next来跳过它。

所有strftime选项都列在here