相关疑难解决方法(0)

迭代Python中的一系列日期

我有以下代码来执行此操作,但我怎样才能做得更好?现在我认为它比嵌套循环更好,但是当你在列表理解中有一个生成器时,它开始得到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_dateend_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 iteration datetime

334
推荐指数
13
解决办法
25万
查看次数

有没有内置的方法来获取python中迭代的长度?

例如,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)

编辑:澄清,我明白整个文件必须阅读!我只是不想在内存中一次性=).

python iterator

47
推荐指数
6
解决办法
2万
查看次数

5
推荐指数
1
解决办法
5453
查看次数

使用 pyspark 计算日期之间的天数,忽略周末

如何使用 计算忽略周末的两个日期之间的天数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它工作得很好。

python pyspark

4
推荐指数
1
解决办法
5498
查看次数

如何在Python中查找两个日期之间的工作日数?

我有两个日期作为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)

不过,我认为有一个更简单的方法可以解决这个问题。

python date python-3.x

0
推荐指数
1
解决办法
4440
查看次数

标签 统计

python ×5

datetime ×2

date ×1

iteration ×1

iterator ×1

pyspark ×1

python-3.x ×1