GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GH-104104: Optimize `pathlib.Path.glob()` by avoiding repeated calls to `os.path.normcase()` by barneygale · Pull Request #104105 · python/cpython

Conversation

@barneygale

@barneygale barneygale commented May 2, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Use re.IGNORECASE to implement case-insensitive matching. This restores behaviour from before #31691.

$ ./python -m timeit -s 'from pathlib import Path; p = Path()' 'list(p.glob("Lib/*.py"))'
500 loops, best of 5: 403 usec per loop   # before
1000 loops, best of 5: 389 usec per loop  # after
  • Issue: Optimize pathlib.Path.glob() by avoiding repeated calls to os.path.normcase() #104104

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@barneygale
pythonGH-104104: Optimize pathlib.Path.glob() by avoiding repeated …
93ad73f
…calls to `os.path.normcase()`

Use `re.IGNORECASE` to implement case-insensitive matching. This
restores behaviour from before python#31691.
@barneygale barneygale added performance Performance or resource usage topic-pathlib labels May 2, 2023
@bedevere-bot bedevere-bot added the awaiting core review label May 2, 2023
@bedevere-bot bedevere-bot mentioned this pull request May 2, 2023
Optimize pathlib.Path.glob() by avoiding repeated calls to os.path.normcase() #104104
Closed
@barneygale barneygale mentioned this pull request May 2, 2023
GH-81079: Add case_sensitive argument to pathlib.Path.glob() #102710
Merged
@barneygale
Fix typo in news entry
3ac8634
AlexWaygood
AlexWaygood approved these changes May 2, 2023
View reviewed changes

@AlexWaygood AlexWaygood left a comment

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a great speedup! LGTM.

What was the motivation for moving to the normcase-based implementation in #31691? Did it just feel simpler at the time?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@bedevere-bot bedevere-bot added awaiting merge and removed awaiting core review labels May 2, 2023
@AlexWaygood AlexWaygood added type-feature A feature request or enhancement 3.12 only security fixes labels May 2, 2023
@barneygale

barneygale commented May 2, 2023

Copy link
Copy Markdown
Contributor Author

What was the motivation for moving to the normcase-based implementation in #31691? Did it just feel simpler at the time?

Mostly because os.path doesn't have an attribute indicating whether it's case sensitive or not, and it didn't occur to me at the time to use normcase('Aa') == 'Aa'.

AlexWaygood reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@barneygale
barneygale merged commit 47770a1 into python:main May 2, 2023
@bedevere-bot bedevere-bot removed the awaiting merge label May 2, 2023
@barneygale

barneygale commented May 2, 2023

Copy link
Copy Markdown
Contributor Author

Thanks for the review! :-)

AlexWaygood reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@AlexWaygood

AlexWaygood commented May 2, 2023

Copy link
Copy Markdown
Member

I think you should add an entry to "What's new in 3.12" about all the great optimisation work you've been doing on pathlib. It's a really good improvement that's worth celebrating :)

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

carljm added a commit to carljm/cpython that referenced this pull request May 2, 2023
@carljm
Merge branch 'main' into cached_property_docs
b9c39e3
* main: (760 commits)
  pythonGH-104102: Optimize `pathlib.Path.glob()` handling of `../` pattern segments (pythonGH-104103)
  pythonGH-104104: Optimize `pathlib.Path.glob()` by avoiding repeated calls to `os.path.normcase()` (pythonGH-104105)
  pythongh-103822: [Calendar] change return value to enum for day and month APIs (pythonGH-103827)
  pythongh-65022: Fix description of tuple return value in copyreg (python#103892)
  pythonGH-103525: Improve exception message from `pathlib.PurePath()` (pythonGH-103526)
  pythongh-84436: Add integration C API tests for immortal objects (pythongh-103962)
  pythongh-103743: Add PyUnstable_Object_GC_NewWithExtraData (pythonGH-103744)
  pythongh-102997: Update Windows installer to SQLite 3.41.2. (python#102999)
  pythonGH-103484: Fix redirected permanently URLs (python#104001)
  Improve assert_type phrasing (python#104081)
  pythongh-102997: Update macOS installer to SQLite 3.41.2. (pythonGH-102998)
  pythonGH-103472: close response in HTTPConnection._tunnel (python#103473)
  pythongh-88496: IDLE - fix another test on macOS (python#104075)
  pythongh-94673: Hide Objects in PyTypeObject Behind Accessors (pythongh-104074)
  pythongh-94673: Properly Initialize and Finalize Static Builtin Types for Each Interpreter (pythongh-104072)
  pythongh-104016: Skip test for deeply neste f-strings on wasi (python#104071)
  pythongh-104057: Fix direct invocation of test_super (python#104064)
  pythongh-87092: Expose assembler to unit tests (python#103988)
  pythongh-97696: asyncio eager tasks factory (python#102853)
  pythongh-84436: Immortalize in _PyStructSequence_InitBuiltinWithFlags() (pythongh-104054)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@AlexWaygood AlexWaygood AlexWaygood approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

3.12 only security fixes performance Performance or resource usage topic-pathlib type-feature A feature request or enhancement

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@barneygale @AlexWaygood @bedevere-bot
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.