Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python3中使用生成器对象(pathlib.iterdir)执行比较?_Python_Python 3.x_Pathlib - Fatal编程技术网

如何在Python3中使用生成器对象(pathlib.iterdir)执行比较?

如何在Python3中使用生成器对象(pathlib.iterdir)执行比较?,python,python-3.x,pathlib,Python,Python 3.x,Pathlib,我在一个名为calls的目录中有很多文件。所有这些文件的文件名中都包含,其创建日期,例如:20181022\u 151012\u kK029150d6.xml 我需要找到创建日期大于等于180天的所有文件。 我正在使用pathlib收集文件名,并可以打印文件名。 我想这样做: calls = Path('/Users/muh/Python/calls') for fyle in calls.iterdir(): datetime.strptime(fyle[:8], "%Y%m%d")

我在一个名为calls的目录中有很多文件。所有这些文件的文件名中都包含其创建日期,例如:20181022\u 151012\u kK029150d6.xml

我需要找到创建日期大于等于180天的所有文件。 我正在使用pathlib收集文件名,并可以打印文件名。 我想这样做:

calls = Path('/Users/muh/Python/calls')
for fyle in calls.iterdir():
    datetime.strptime(fyle[:8], "%Y%m%d")
但我得到“PosixPath”对象不可下标


我需要将每个文件名中的YYYYMMDD与当前的YYYYMMDD进行比较。

As
@juanpa.arrivillaga
建议使用
fyle.name[:8]
,这很好

建议:每当遇到此类问题时,请尝试获取该对象的详细信息,如下所示(为任何对象定义了哪些属性/方法)

在上面的列表中,您可以找到类似于
[…,'mkdir',name',open',owner',parent',…]
的条目,您可以看到
'name'
是其中的一部分。最后,您可以尝试访问像
fyle.name
|
type(fyle.name)
等来检查它是否是字符串或其他内容

解决方案: 所以,你可以这样做

from pathlib import Path
from datetime import datetime

calls = Path("/Users/muh/Python/calls")
details = {}

i = 1
for fyle in calls.iterdir():
    date = datetime.strptime(fyle.name[:8], "%Y%m%d")

    # Write logic here 
详细的: 在下面的代码中,我已将详细信息存储到字典中,以便您可以查看代码中更改的对象的不同状态

在我的例子中,
calls
目录的路径是
/Users/hygull/Projects/django1.9.x-docs/Sfw/file\u handling/calls

我已经存储了每一部分,以帮助您解决问题。我没有尝试引入新变量,除了d详细信息&还多次将名为fyle的变量用于不同的目的(如果在简单程序中不进一步使用该变量,这是很好的,为大型应用程序引入有意义的变量名称也是很好的)

date是实际的datetime对象,您可以使用它进行操作以实现最终目标

输出


使用
fyle.name[:8]
@mr.zog,请检查我的答案是否适合您。在查看了评论和否决票之后,我更新了我的答案,现在一切都好了。顺便说一句,对于任何python,请始终使用generic[python]标记questions@mr.zog,我再次用调试信息更新了我的答案,这将对您有用。@juanpa.arrivillaga,非常感谢您的建议。我是盲人,看不出这个问题是否与使用
pathlib
有关,那么我为什么建议在这里使用
os
。我已经对该行进行了注释,并使用替代方法从文件路径获取基本名称。再次感谢你指出我的错误。不@juanpa.arrivillaga,这里没有实际用途。也许,这有点尴尬,因为这不是你的问题。第一次,当我不知道使用
.name
时,我提出了不同的方法来解决问题。当时我想记下并存储转换的每个细节。现在,我更新了我的答案。我知道你已经解决了。为了澄清疑问,我将答案分为两部分。考虑第一个作为工作。第二个是详细的(用于调试此类问题)。谢谢你回信。
from pathlib import Path
from datetime import datetime

calls = Path("/Users/muh/Python/calls")
details = {}

i = 1
for fyle in calls.iterdir():
    date = datetime.strptime(fyle.name[:8], "%Y%m%d")

    # Write logic here 
from pathlib import Path
from datetime import datetime

calls = Path("/Users/hygull/Projects/django1.9.x-docs/Sfw/file_handling/calls")
details = {}

i = 1
for fyle in calls.iterdir():
    d = {}
    d["pathlib"] = fyle

    fyle = str(fyle)
    d["fullpath"] = fyle

    # fyle = fyle.split("/")[-1]
    fyle = fyle.name[:8]
    d["file_name"] = fyle

    date = datetime.strptime(fyle[:8], "%Y%m%d")
    d["date"] = date

    # Write your business logic here

    details["file" + str(i)] = d
    i += 1

print(details)
{'file2': {'date': datetime.datetime(2018, 10, 25, 0, 0), 'file_name': '20181025_151013_kK029150d7.xml', 'fullpath': '/Users/hygull/Projects/django1.9.x-docs/Sfw/file_handling/calls/20181025_151013_kK029150d7.xml', 'pathlib': PosixPath('/Users/hygull/Projects/django1.9.x-docs/Sfw/file_handling/calls/20181025_151013_kK029150d7.xml')}, 'file1': {'date': datetime.datetime(2018, 10, 22, 0, 0), 'file_name': '20181022_151012_kK029150d6.xml', 'fullpath': '/Users/hygull/Projects/django1.9.x-docs/Sfw/file_handling/calls/20181022_151012_kK029150d6.xml', 'pathlib': PosixPath('/Users/hygull/Projects/django1.9.x-docs/Sfw/file_handling/calls/20181022_151012_kK029150d6.xml')}}