我正在解析.csv文件,其中包含财务日期时间格式yyyymmdd
的日期列,我需要在将一些行写入不同文件时删除周末。
我知道使用datetime.weekdays()
然后:
if some_datetime_object.datetime.weekday() != 6 or 1:
f.write(some_row)
但是,如何将从csv解析的字符串转换为datetime对象以允许使用weekday()
函数。
答案 0 :(得分:1)
您可以使用datetime.datetime.strptime
:
import datetime
#example date strings
date1 = "20120423"
date2 = "2015-04-23"
datetime_object_1 = datetime.datetime.strptime(date1, '%Y%m%d')
datetime.datetime(2012, 4, 23, 0, 0)
datetime_object_2 = datetime.datetime.strptime(date1, '%Y-%m-%d')
datetime.datetime(2012, 4, 23, 0, 0)
查看此page的底部,查看此函数格式化程序的所有可能指令。您可以使用strptime
方法解析几乎所有带日期/时间数据的字符串。
答案 1 :(得分:0)
您可以使用strptime
转换为日期时间对象。从这里,您可以使用weekdays
方法。
但是,如果您只想保持周一至周五,则您的条件不准确。请注意,weekday
返回0到6之间的整数,星期一为0,星期日为6。
以整数形式返回星期几,其中星期一为0,星期日为6。
这意味着您要检查返回的值是5
还是6
。
您拥有的条件不会因其他原因而起作用。
if some_datetime_object.datetime.weekday() != 6 or 1:
这就是说工作日不是星期日或者是真的。您正在短路您的条件并强制所有内容True
。你需要做这样的事情(调整适当的值)
if some_datetime_object.datetime.weekday() != 6 and some_datetime_object.datetime.weekday() != 1:
我在下面的代码中使用not in
if datetime.datetime.strptime(d, '%Y%m%d').weekday() not in (5,6):
import datetime
dates = [
"20150801",
"20150802",
"20150803",
"20150804",
"20150805",
"20150806",
"20150807",
"20150808",
"20150809",
]
for d in dates:
if datetime.datetime.strptime(d, '%Y%m%d').weekday() not in (5,6):
print d
输出:
20150803
20150804
20150805
20150806
20150807
答案 2 :(得分:-1)
from datetime import datetime
date_string = '20150501'
some_datetime_object = datetime(int(date_string[:4]), int(date_string[4:6]), int(date_string[6:]))
但是你的代码不起作用,因为if语句被错误地写了。正确的方法是:
if some_datetime_object.datetime.weekday() not in (5,6)]: