我正在尝试从.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文件。我也可能完全过于复杂,所以我愿意接受如何从头开始重新启动整个过程的建议。
答案 0 :(得分:2)
datetime.datetime
个对象具有day
,hour
和minute
属性,您可以使用这些属性获取相应的信息 -
演示 -
>>> 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
中