Как @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 несколько раз для разных целей (Это хорошо, если не и дальше использовать эту переменную в простых программах, а также полезно ввести значимые имена переменных для больших приложений).
date - это фактический объект datetime, который вы можете использовать для манипуляции для достижения вашей конечной цели.
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')}}