第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 pathlib 中使用遞歸文件搜索和排除startswith()

在 pathlib 中使用遞歸文件搜索和排除startswith()

catspeake 2022-10-06 18:55:41
我想使用 pathlib 遞歸搜索所有文件夾中的所有文件,但我想排除以“。”開頭的隱藏系統(tǒng)文件。(如'.DS_Store')但我在pathlib中找不到像startswith這樣的函數(shù)。如何在 pathlib 中實(shí)現(xiàn)startswith?我知道如何用 os 來做到這一點(diǎn)。def recursive_file_count(scan_path):    root_directory = Path(scan_path)    fcount = len([f for f in root_directory.glob('**/*') if f.startswith(".")])    print(fcount)
查看完整描述

3 回答

?
慕仙森

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

startswith()是一個(gè) Python 字符串方法,見https://python-reference.readthedocs.io/en/latest/docs/str/startswith.html

由于您的 f 是 Path 對(duì)象,因此您必須先將其轉(zhuǎn)換為字符串str(f)

def recursive_file_count(scan_path):

    root_directory = Path(scan_path)

    fcount = len([f for f in root_directory.glob('**/*') if str(f).startswith(".")])

    print(fcount)


查看完整回答
反對(duì) 回復(fù) 2022-10-06
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

有一種startswith- 你可以使用pathlib.Path.is_relative_to():


pathlib.Path.is_relative_to()在 Python 3.9 中添加,如果您想在早期版本(3.6 以上)上使用它,您需要使用 backport pathlib3x:


$> python -m pip install pathlib3x

$> python

>>> p = Path('/etc/passwd')

>>> p.is_relative_to('/etc')

True

>>> p.is_relative_to('/usr')

False

你可以在githubPyPi 上找到 pathlib3x

但這對(duì)您的示例仍然無濟(jì)于事,因?yàn)槟胩^以“?!遍_頭的文件。- 所以你的解決方案是正確的 - 但不是很有效:


def recursive_file_count(scan_path):

    root_directory = Path(scan_path)

    fcount = len([f for f in root_directory.glob('**/*') if not str(f.name).startswith(".")])

    print(fcount)

想象一下,您在scan_path中有 200 萬個(gè)文件,這將創(chuàng)建一個(gè)包含 200 萬個(gè) pathlib.Path 對(duì)象的列表。哇,這需要一些時(shí)間和記憶......

最好有一種像 fnmatch 這樣的過濾器或用于 glob 函數(shù)的東西——我正在考慮將它用于 pathlib3x。

Path.glob() 返回一個(gè)生成器迭代器,它需要更少的內(nèi)存。

所以為了節(jié)省內(nèi)存,解決方案可以是:

def recursive_file_count(scan_path):

    root_directory = Path(scan_path)

    fcount = 0

    # we only have one instance of f at the time

    for f in root_directory.glob('**/*'):

        if not str(f.name).startswith(".")]):

            fcount = fcount + 1

    print(count)


查看完整回答
反對(duì) 回復(fù) 2022-10-06
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

我的解決方案:


def recursive_file_count(scan_path):

    root_directory = Path(scan_path)

    fcount = len([f for f in root_directory.glob('**/*') if not str(f.name).startswith(".")])

    print(fcount)


查看完整回答
反對(duì) 回復(fù) 2022-10-06
  • 3 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)