我在名为calls的目录中有大量文件。所有这些文件的文件名均包含 创建日期,例如: 20181022 _151012_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进行比较。
答案 0 :(得分:0)
正如@juanpa.arrivillaga
建议使用fyle.name[:8]
那样,很好。
建议:每当您遇到这种问题时,只需尝试按以下方式获取该对象的详细信息(任何对象的定义属性/方法是什么)。
>>> contents = calls.iterdir()
>>>
>>> content = contents.next()
>>>
>>> content
PosixPath('/Users/hygull/Projects/django1.9.x-docs/Sfw/file_handling/calls/20181022_151012_kK029150d6.xml')
>>>
>>> dir(content)
['__bytes__', '__class__', '__delattr__', '__div__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__rdiv__', '__reduce__', '__reduce_ex__', '__repr__', '__rtruediv__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', '__truediv__', '_accessor', '_cached_cparts', '_cparts', '_drv', '_flavour', '_format_parsed_parts', '_from_parsed_parts', '_from_parts', '_hash', '_init', '_make_child', '_make_child_relpath', '_opener', '_parse_args', '_parts', '_pparts', '_raw_open', '_root', '_str', 'absolute', 'anchor', 'as_posix', 'as_uri', 'chmod', 'cwd', 'drive', 'exists', 'glob', 'group', 'is_absolute', 'is_block_device', 'is_char_device', 'is_dir', 'is_fifo', 'is_file', 'is_reserved', 'is_socket', 'is_symlink', 'iterdir', 'joinpath', 'lchmod', 'lstat', 'match', 'mkdir', 'name', 'open', 'owner', 'parent', 'parents', 'parts', 'relative_to', 'rename', 'replace', 'resolve', 'rglob', 'rmdir', 'root', 'stat', 'stem', 'suffix', 'suffixes', 'symlink_to', 'touch', 'unlink', 'with_name', 'with_suffix']
>>>
在上面的列表中,您将找到[..., '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_handling/calls
。
我已经存储了每一点,以帮助您解决问题。除了 d 和 details 之外,我没有尝试引入新变量,并且还多次将您的名为 fyle 的变量用于不同的目的(如果不要在简单的程序中进一步使用该变量,也可以为大型应用程序引入有意义的变量名。
日期是实际的日期时间对象,可用于进行操纵以实现最终目标。
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')}}