'datetime.datetime' 类型的数据更改格式 不更改数据类型
时间: 2023-12-03 10:02:40 浏览: 76
可以使用 `strftime()` 方法将 `datetime.datetime` 类型的数据转换为字符串格式,再根据需要更改格式,例如:
```python
import datetime
now = datetime.datetime.now() # 获取当前时间
print(now) # 输出:2022-01-10 14:13:27.013663
# 将日期时间转换为字符串格式,格式为年月日时分秒
str_time = now.strftime('%Y-%m-%d %H:%M:%S')
print(str_time) # 输出:2022-01-10 14:13:27
```
这样就将 `datetime.datetime` 类型的数据转换成了字符串格式,并且更改了显示格式,但是数据类型仍然是 `datetime.datetime`。如果需要将字符串格式的时间转换回 `datetime.datetime` 类型,可以使用 `strptime()` 方法,例如:
```python
str_time = '2022-01-10 14:13:27'
datetime_time = datetime.datetime.strptime(str_time, '%Y-%m-%d %H:%M:%S')
print(datetime_time) # 输出:2022-01-10 14:13:27
```
相关问题
这段pytorch代码一直报错type object 'datetime.datetime' has no attribute 'datetime',我该怎么调整呢?这是什么原因呢?最后生成一组数据让我看看修改是否可行def add_week_feature(data): data = np.load(flow_file) T_ =data['data'] week_feature = torch.zeros((T_.shape[0], 1)) for i in range(T_.shape[0]): date_str = '2016-01-01 00:00:00' date = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S') date += datetime.timedelta(minutes=5*i) week = date.weekday() week_feature[i] = week + 1 week_feature = week_feature.unsqueeze(1).repeat(1, 307, 12, 1) week_feature = week_feature.reshape(16992,307,12,1) data= torch.cat((data, week_feature), dim=-1) return data
这个报错很可能是因为在代码中使用了 `datetime.datetime`,但是 `datetime` 模块已经被引入,所以无需添加 `datetime` 这个前缀。您可以将代码中的 `datetime.datetime` 改为 `datetime`,即可解决这个错误。
另外,您提供的代码中使用了 `np.load` 函数读取数据,但是使用的是 PyTorch 的张量进行操作。建议使用 PyTorch 的数据读取方式,将数据读取为 PyTorch 张量,可以避免类型转换和数据格式转换的问题。如果您的数据是 `.npy` 或 `.npz` 格式,可以使用 `torch.from_numpy` 函数将其转换为 PyTorch 张量。
下面是修改后的代码:
```python
import torch
import numpy as np
import datetime
def add_week_feature(data_file):
"""
将星期特征添加到原有的数据集中
:param data_file: 原始数据文件路径
:return: 添加星期特征后的数据集,大小为 (batch_size, seq_len, num_features+1)
"""
data = torch.from_numpy(np.load(data_file)['data'])
batch_size, seq_len, num_features = data.shape
week_feature = torch.zeros((batch_size, seq_len, 1))
# 遍历所有时间点,获取对应的星期并将星期转化为对应的数字
for i in range(batch_size):
date_str = '2016-01-01 00:00:00' # 假设数据集中的时间从2016年1月1日开始
date = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
for j in range(seq_len):
date += datetime.timedelta(minutes=5*j) # 每个时间点间隔5分钟
week = date.weekday() # 获取星期,0表示星期一,1表示星期二,以此类推
week_feature[i, j, 0] = week + 1 # 将星期转化为对应的数字并将其存入星期特征张量中
# 将星期特征添加到原有的数据集中
week_feature = week_feature.repeat(1, 1, num_features).reshape(batch_size, seq_len, num_features, 1)
data = torch.cat((data, week_feature), dim=-1)
return data
```
您可以将数据文件路径作为输入参数传入 `add_week_feature` 函数,函数返回添加星期特征后的数据集,大小为 `(batch_size, seq_len, num_features+1)`。您可以使用 `print` 函数查看生成的数据集,例如:
```python
data_file = 'data.npy'
data = add_week_feature(data_file)
print(data)
print(data.shape)
```
请注意修改 `data.npy` 为您的数据文件路径。
now = datetime.datetime.now().time() # 获取当前时间 if now >= datetime.time(8, 0, 0) and now <= datetime.time(19, 0, 0): # 当前时间在08:00到19:00之间 img_path = 'D:\出勤人力白班.PNG' else: # 当前时间不在08:00到19:00之间 img_path = 'D:\出勤人力夜班.PNG' # 打开 Excel 文件 wb = openpyxl.load_workbook(r'D:\出勤匯總\郵件.xlsx') # 选择工作表 ws = wb.active # 读取一列数据并生成列表郵件收件人 recipients = [] for cell in ws['A']: recipients.append(cell.value) # 读取一列数据并生成列表郵件CC recipients1 = [] for cell in ws['B']: recipients1.append(cell.value) # 使用 Outlook API 发送电子邮件 outlook = win32com.client.Dispatch('Outlook.Application') mail = outlook.CreateItem(0) mail.To = ";".join(recipients) mail.CC = ";".join(recipients1) mail.Subject = '自動報告5 出勤人力' # 添加图片到正文中 attachment = mail.Attachments.Add(img_path, 6, 0) html_body = f'<html><body><h2>Dear sir:</h2><p>如下為每日加班管控明細,還請查閲,tks!!!</p><img src="cid:{attachment.FileName}"></body></html>' mail.HTMLBody = html_body attachment = mail.Attachments.Addr("D:\出勤匯總\SMT部編制人力.xlsm") mail.Send() 報TypeError: sequence item 1: expected str instance, NoneType found怎麽修改
这个错误是因为 `mail.Attachments.Add()` 方法返回的是 `None`,而你把它赋值给了 `attachment` 变量。所以在后面调用 `mail.Attachments.Addr()` 方法时,出现了类型错误。
可以将 `mail.Attachments.Add()` 方法的返回值直接作为参数传递给 `mail.Attachments.Addr()` 方法,就可以解决这个问题。修改后的代码如下:
```python
now = datetime.datetime.now().time() # 获取当前时间
if now >= datetime.time(8, 0, 0) and now <= datetime.time(19, 0, 0):
# 当前时间在08:00到19:00之间
img_path = 'D:\出勤人力白班.PNG'
else:
# 当前时间不在08:00到19:00之间
img_path = 'D:\出勤人力夜班.PNG'
# 打开 Excel 文件
wb = openpyxl.load_workbook(r'D:\出勤匯總\郵件.xlsx')
# 选择工作表
ws = wb.active
# 读取一列数据并生成列表郵件收件人
recipients = []
for cell in ws['A']:
recipients.append(cell.value)
# 读取一列数据并生成列表郵件CC
recipients1 = []
for cell in ws['B']:
recipients1.append(cell.value)
# 使用 Outlook API 发送电子邮件
outlook = win32com.client.Dispatch('Outlook.Application')
mail = outlook.CreateItem(0)
mail.To = ";".join(recipients)
mail.CC = ";".join(recipients1)
mail.Subject = '自動報告5 出勤人力'
# 添加图片到正文中
attachment = mail.Attachments.Add(img_path, 6, 0)
html_body = f'<html><body><h2>Dear sir:</h2><p>如下為每日加班管控明細,還請查閲,tks!!!</p><img src="cid:{attachment.FileName}"></body></html>'
mail.HTMLBody = html_body
# 添加附件
mail.Attachments.Add("D:\出勤匯總\SMT部編制人力.xlsm")
# 发送邮件
mail.Send()
```
注意,修改后的代码中,我把 `mail.Attachments.Addr()` 方法的调用删除了。因为这个方法的作用是添加附件,而你已经调用了 `mail.Attachments.Add()` 方法添加了附件,所以这里就不需要再添加了。
阅读全文