for d in read_data: tmp = d.split('\n')[0] tmp = tmp.split(" ") for t in tmp: if t != '': data.append(t) if len(data) > 11: data_len = len(data) last_data = data[10] for i in range(11, data_len): last_data = last_data + ' ' + data[i] data[i] = '' data[10] = last_data if len(data) > 11: for d in data: if d != '': last_datas.append(d)
时间: 2023-06-25 12:03:57 浏览: 48
这段代码看起来像是将一些文本数据进行处理,并将结果存储在一个列表中。具体来说,它首先从一个字符串列表中读取数据,将每个字符串按空格分割,然后将分割后的单词添加到新的列表中。如果新列表长度超过11,它会将第10个元素作为最后一个单词,并将11到最后一个元素合并成一个字符串。如果合并后的字符串仍然超过了11个元素,它将继续重复这个过程,直到所有的元素都被处理完毕。最后,它将所有非空元素添加到另一个列表中(即last_datas)。
相关问题
import numpy as np from datetime import datetime, timedelta import pandas as pd test = pd.read_excel("C:\\Users\\1data\\Desktop\\DBM成本收入核算\\test.xlsx") start_date = pd.to_datetime(test['合同开始日期']) end_date = pd.to_datetime(test['合同截止日期']) test['合同周期月数'] = round((end_date - start_date) / np.timedelta64(1, 'M')) start_date_col = '合同开始日期' end_date_col = '合同截止日期' new_col = '日期' for index, row in test.iterrows(): start_date = pd.to_datetime(row[start_date_col]) end_date = pd.to_datetime(row[end_date_col]) date_list = [] if start_date.day <= 15: while start_date <= end_date: date_list.append(start_date) start_date = start_date + timedelta(days=30) else: start_date = start_date + timedelta(days=30) while start_date <= end_date + timedelta(days=30): date_list.append(start_date) start_date = start_date + timedelta(days=30) test.loc[index, new_col] = ','.join([str(date.date()) for date in date_list]) df_tmp=test['日期'].str.split(',',expand=True) df_tmp=df_tmp.stack() df_tmp = df_tmp.reset_index(level=1,drop=True) df_tmp.name='日期' df_new = test.drop(['日期'], axis=1).join(df_tmp).reset_index().drop(columns='index') print(df_new) df_new.to_excel('income_test.xlsx',index=False) 将这段代码导出的excel中合同开始日期字段不显示时分秒且新增日期字段的取年月的字段合同周期年月
要将导出的 Excel 中的合同开始日期字段只显示年月日,可以使用 pandas 的 to_datetime 方法中的 strftime 函数将日期格式化为字符串再导出到 Excel 中。修改代码如下:
```
import numpy as np
from datetime import datetime, timedelta
import pandas as pd
test = pd.read_excel("C:\\Users\\1data\\Desktop\\DBM成本收入核算\\test.xlsx")
start_date = pd.to_datetime(test['合同开始日期'])
end_date = pd.to_datetime(test['合同截止日期'])
test['合同周期月数'] = round((end_date - start_date) / np.timedelta64(1, 'M'))
start_date_col = '合同开始日期'
end_date_col = '合同截止日期'
new_col = '日期'
for index, row in test.iterrows():
start_date = pd.to_datetime(row[start_date_col])
end_date = pd.to_datetime(row[end_date_col])
date_list = []
if start_date.day <= 15:
while start_date <= end_date:
date_list.append(start_date)
start_date = start_date + timedelta(days=30)
else:
start_date = start_date + timedelta(days=30)
while start_date <= end_date + timedelta(days=30):
date_list.append(start_date)
start_date = start_date + timedelta(days=30)
# 格式化日期字符串为年月日
date_str_list = [date.strftime('%Y-%m-%d') for date in date_list]
test.loc[index, new_col] = ','.join(date_str_list)
# 将日期字段拆分为多列
df_tmp = test['日期'].str.split(',', expand=True)
df_tmp = df_tmp.stack()
df_tmp = df_tmp.reset_index(level=1, drop=True)
df_tmp.name = '日期'
# 将拆分后的日期列与原始 DataFrame 合并
df_new = pd.concat([test.drop(['日期'], axis=1), df_tmp], axis=1)
df_new = df_new.reset_index().drop(columns='index')
# 计算合同周期年月
df_new['合同周期年月'] = df_new['合同周期月数'].apply(lambda x: f"{int(x//12)}年{int(x%12)}月")
# 导出到 Excel
df_new.to_excel('income_test.xlsx', index=False)
```
这样导出的 Excel 文件中的合同开始日期字段只显示年月日,而新增日期字段的取年月的字段合同周期年月也被计算出来了。
last_datas = [] fileRead = open("tempdata.txt", mode='r') read_data = fileRead.readlines() for d in read_data: # 根据换行符对数据进行切割 tmp = d.split('\n')[0] # 更具空格对数据进行切割 tmp = tmp.split(" ") data = [] # 提取数据 for t in tmp: if t != '': data.append(t) # 整合数据 (如果data数组的长度大于11,说明一组数据已经读取完毕。) if len(data) > 11: data_len = len(data) # 对 COMMAND 数据进行处理 last_data = data[10] for i in range(11, data_len): last_data = last_data + ' ' + data[i] data[i] = '' data[10] = last_data if len(data) > 11: for d in data: if d != '': last_datas.append(d) # 读本地数据,并存储到列表,然后返回给前端(通过JSon的格式) return_data = [] dic_keys = ["user", "pid", "cpu", "mem", "vsz", "rss", "tty", "stat", "start", "time", "command"] for i in range(0, len(last_datas), 11): ret = last_datas[i: i + 11] res_dic = {} for r in range(len(ret)): res_dic[dic_keys[r]] = ret[r] return_data.append(res_dic) # 关闭ssh服务 ssh_client.close() # 请求码 request_data = {"code": 200, "message": "请求成功", "data": return_data} return JsonResponse(request_data)
这段代码是一个 Python 函数,用于读取一个名为 "tempdata.txt" 的文本文件,并将其中的数据进行处理后返回给前端。具体而言:
1. 首先定义一个空列表 last_datas 用于存储从文件中读取的数据。
2. 打开名为 "tempdata.txt" 的文本文件,并读取其中的所有行。
3. 对于每一行数据,先根据换行符对其进行切割,然后根据空格对其进行进一步的切割,提取数据并存储到 data 列表中。
4. 如果 data 列表的长度大于 11,则说明一组数据已经读取完毕,需要整合数据。具体而言,在 COMMAND 数据之后的所有数据都属于 COMMAND 数据的一部分,需要将它们合并成一个完整的 COMMAND 数据。
5. 将整合后的数据存储到 last_datas 列表中。
6. 对于 last_datas 中的每一组数据,将其转化为一个字典,并将字典添加到 return_data 列表中。其中,字典的键为 ["user", "pid", "cpu", "mem", "vsz", "rss", "tty", "stat", "start", "time", "command"],对应着每一组数据中的不同字段。
7. 最后关闭 ssh 服务,构造一个包含请求码、消息和数据的 JSON 对象,并将其返回给前端。