我有以下代码来执行此操作,但我怎样才能做得更好?现在我认为它比嵌套循环更好,但是当你在列表理解中有一个生成器时,它开始得到Perl-one-liner.
day_count = (end_date - start_date).days + 1
for single_date in [d for d in (start_date + timedelta(n) for n in range(day_count)) if d <= end_date]:
print strftime("%Y-%m-%d", single_date.timetuple())
Run Code Online (Sandbox Code Playgroud)
start_date和end_date变量是datetime.date因为我不需要时间戳对象.(它们将用于生成报告).对于开始日期2009-05-30和结束日期2009-06-09:
2009-05-30
2009-05-31
2009-06-01
2009-06-02
2009-06-03
2009-06-04
2009-06-05
2009-06-06
2009-06-07
2009-06-08
2009-06-09
Run Code Online (Sandbox Code Playgroud) 例如,Python中的文件是可迭代的 - 它们遍历文件中的行.我想计算行数.
一个快速的方法是这样做:
lines = len(list(open(fname)))
Run Code Online (Sandbox Code Playgroud)
但是,这会将整个文件加载到内存中(一次).这相当违背了迭代器的目的(它只需要将当前行保留在内存中).
这不起作用:
lines = len(line for line in open(fname))
Run Code Online (Sandbox Code Playgroud)
因为发电机没有长度.
有没有办法做到这一点,没有定义计数功能?
def count(i):
c = 0
for el in i: c += 1
return c
Run Code Online (Sandbox Code Playgroud)
编辑:澄清,我明白整个文件必须阅读!我只是不想在内存中一次性=).
查找两个日期(不包括周末日)之间的日差异同样的问题,但它适用于javascript.如何在Python中做到这一点?
如何使用 计算忽略周末的两个日期之间的天数pyspark?
这与这里的问题完全相同,只是我需要这样做pyspark。
我尝试使用udf:
import numpy as np
from pyspark.sql.functions import udf
from pyspark.sql.types import IntegerType
@udf(returnType=IntegerType())
def dateDiffWeekdays(end, start):
return int(np.busday_count(start, end)) # numpy returns an `numpy.int64` type.
Run Code Online (Sandbox Code Playgroud)
使用此 udf 时,我收到一条错误消息:
ModuleNotFoundError:没有名为“numpy”的模块
有谁知道如何解决这个问题?udf或者更好的是,在没有原生的情况下解决这个问题pyspark?
编辑:我已经numpy安装了。在 a 之外udf它工作得很好。
我有两个日期作为datetime.date对象,查找这两个日期之间的工作日数(包括开始日期和排除结束日期)的最 Pythonic 方法是什么?例如:
from datetime import date, timedelta
d1 = date(2019, 3, 1)
d2 = date(2019, 5, 6)
# The difference between d2 and d1 is 46 workdays
Run Code Online (Sandbox Code Playgroud)
我想到写一个循环:
workdays = 0
for i in range((d2 - d1).days):
if (d1 + timedelta(days=i)).isoweekday() <= 5:
workdays += 1
Run Code Online (Sandbox Code Playgroud)
不过,我认为有一个更简单的方法可以解决这个问题。