设置变量-处理年月日

任务描述

在Kettle中,读者可通过获得系统信息组件获得系统环境变量,也可以通过设置变量,定义虚拟机和任务中的变量。在项目中,经常利用生产环境或外围系统交互的FTP文件接口,获取固定格式的数据文件。

某生产系统每天定时推送名称格式包含yyyyMMdd的数据文件,为了获得日期变量并每天读取由生产系统推送的前两天的数据文件,需要使用设置变量组件,设置名称为fileDate的变量,该变量值需要符合yyyyMMdd格式,取值为当前系统日期的前两天。

任务分析

(1) 建立【设置变量】转换工程。

(2) 设置【设置变量】参数。

(3) 预览结果数据。

建立设置变量转换工程

某生产系统定时每天推送前两天的、名称格式为yyyyMMdd(y指的是年,M指的是月,d指的是日,例如20200320)数据文件,例如20200320.csv。自定义fileDate变量,取值符合yyyyMMdd格式,随着日期改变,取值为当前日期的前两天,例如,今天为2020年3月24日,则fileDate取值为“20200322”。

建立设置变量转换工程步骤如下。

(1) 创建设置变量转换工程。使用Ctrl+N快捷键,创建【设置变量】转换工程。

(2) 创建获取系统信息组件,定义变量。创建【获取系统信息】组件,设置参数,【字段】设置为“fileDate”,【类型】设置为“今天00:00:00”。

建立设置变量转换工程

(3) 创建JavaScript代码组件,定义变量格式。创建【JavaScript代码】组件,如图所示

 双击【JavaScript代码】组件,编写JavaScript脚本,定义dtNew变量格式为yyyyMMdd,取值为当前日期的前两天,并将dtNew变量名称改名为fileDate。编写代码和设置完成时,【JavaScript代码】参数设置如图所示。

 

//Script here

Date.prototype.Format = function (fmt) { //author: meizz 
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}
var dtNew=new Date(new Date().getTime()-2*24*60*60*1000).Format("yyyyMMdd");
//当天减去2天时间ms数,得到前天的时间

 双击【设置变量】组件,弹出【设置环境变量】对话框,如图所示。

最后的运行情况如下: 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用pandas的read_csv函数读取csv文件,并指定解析时间的列为年月格式。具体代码如下: ```python import pandas as pd # 读取csv文件,假设时间数据在第二列 df = pd.read_csv('filename.csv', parse_dates=[1]) # 输出年月数据 print(df['time'].dt.year) # 年 print(df['time'].dt.month) # 月 print(df['time'].dt.day) # ``` 这里假设时间数据在第二列,并且时间数据格式为年月。使用parse_dates参数将第二列解析成时间格式,然后可以通过dt.year、dt.month和dt.day来获取年月数据。 ### 回答2: 读取CSV文件中的年月可以通过以下步骤实现: 1. 导入所需的库:首先需要导入pandas库来处理CSV文件。使用以下代码导入pands库: ```python import pandas as pd ``` 2. 读取CSV文件:使用pandas的`read_csv()`函数来读取CSV文件并将其存储在一个DataFrame对象中。假设CSV文件名为“data.csv”,可以使用以下代码进行读取: ```python data = pd.read_csv("data.csv") ``` 3. 提取年月数据:读取CSV文件后,可以通过DataFrame的操作来提取年月数据。假设我们的CSV文件包含一个名为“date”的列,列中的数据是以“年--”格式存储的,我们可以使用以下代码提取年月数据: ```python data["year"] = pd.to_datetime(data["date"]).dt.year data["month"] = pd.to_datetime(data["date"]).dt.month data["day"] = pd.to_datetime(data["date"]).dt.day ``` 4. 打印结果:使用以下代码将提取的年月数据打印出来: ```python print(data["year"]) print(data["month"]) print(data["day"]) ``` 以上步骤将读取CSV文件中的年月数据,并将其存储在DataFrame中的相应列中。最后,我们可以通过打印这些列来验证是否成功提取了年月数据。 ### 回答3: 要读取CSV文件中的年月,可以使用Python的csv模块来实现。首先,需要导入csv模块: import csv 然后,使用csv.reader函数打开CSV文件并创建一个reader对象: with open('file.csv', 'r') as file: reader = csv.reader(file) 接下来,我们可以使用for循环逐行读取CSV文件中的数据,并使用split函数将每行数据分割为不同的字段: for row in reader: date = row[0].split('-') # 假设第一列是期,使用'-'分割年月 这样,date变量就是一个包含年月的列表。如果想要将年、月、分别提取出来,可以按照以下方式处理date列表: year = date[0] # 年 month = date[1] # 月 day = date[2] # 最后,根据实际需求可以对年、月、进行进一步的处理或者存储。在读取CSV文件时,还可以使用其他函数来处理不同的数据类型,例如,int函数将年、月、转换为整数型数据。 需要注意的是,以上示例中假设CSV文件中的期数据以'-'作为分隔符,实际情况可能有所不同,需要根据实际情况进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kiritobryant

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值