[New-bugs-announce] [issue32040] Sorting pahtlib.Paths does give the same order as sorting the (string) filenames of that pathlib.Paths

QbLearningPython report at bugs.python.org
Wed Nov 15 14:48:55 EST 2017


New submission from QbLearningPython <quibizo at hotmail.com>:

While testing a module, I have found a weird behaviour of pathlib package. I have a list of pathlib.Paths and I sorted() it. I assumed that the order retrieved by sorting a list of Paths would be the same as the order retrieved by sorting the list of their corresponding (string) filenames. But it is not the case.

I run the following example:


==========================================================================


from pathlib import Path

# order string filenames

filenames_for_testing = (
    '/spam/spams.txt',
    '/spam/spam.txt',
    '/spam/another.txt',
    '/spam/binary.bin',
    '/spam/spams/spam.ttt',
    '/spam/spams/spam01.txt',
    '/spam/spams/spam02.txt',
    '/spam/spams/spam03.ppp',
    '/spam/spams/spam04.doc',
)

sorted_filenames = sorted(filenames_for_testing)

# output ordered list of string filenames

print()
print("Ordered list of string filenames:")
print()
[print(f'\t{element}') for element in sorted_filenames]
print()

# order paths (build from same string filenames)

paths_for_testing = [
    Path(filename)
    for filename in filenames_for_testing
]
sorted_paths = sorted(paths_for_testing)

# outoput ordered list of pathlib.Paths

print()
print("Ordered list of pathlib.Paths:")
print()
[print(f'\t{element}') for element in sorted_paths]
print()

# compare

print()

if sorted_filenames == [str(path) for path in sorted_paths]:
    print('Ordered lists of string filenames and pathlib.Paths are EQUAL.')

else:
    print('Ordered lists of string filenames and pathlib.Paths are DIFFERENT.')

    for element in range(0, len(sorted_filenames)):

        if sorted_filenames[element] != str(sorted_paths[element]):

            print()
            print('First different element:')
            print(f'\tElement #{element}')
            print(f'\t{sorted_filenames[element]} != {sorted_paths[element]}')
            break

print()



==========================================================================


The output of this script was:


==========================================================================

Ordered list of string filenames:

	/spam/another.txt
	/spam/binary.bin
	/spam/spam.txt
	/spam/spams.txt
	/spam/spams/spam.ttt
	/spam/spams/spam01.txt
	/spam/spams/spam02.txt
	/spam/spams/spam03.ppp
	/spam/spams/spam04.doc


Ordered list of pathlib.Paths:

	/spam/another.txt
	/spam/binary.bin
	/spam/spam.txt
	/spam/spams/spam.ttt
	/spam/spams/spam01.txt
	/spam/spams/spam02.txt
	/spam/spams/spam03.ppp
	/spam/spams/spam04.doc
	/spam/spams.txt


Ordered lists of string filenames and pathlib.Paths are DIFFERENT.

First different element:
	Element #3
	/spam/spams.txt != /spam/spams/spam.ttt


==========================================================================


As you can see, 'spam/spams.txt' goes in different places if you have sorted by pathlib.Paths than if you have sorted by string filenames.

I think that it is weird that sorting pathlib.Paths yields a different result than sorting their string filenames. I think that pathlib.Paths should be ordered by alphabetical order of their corresponding filenames.

Thank you.

----------
components: Extension Modules
messages: 306304
nosy: QbLearningPython
priority: normal
severity: normal
status: open
title: Sorting pahtlib.Paths does give the same order as sorting the (string) filenames of that pathlib.Paths
type: behavior
versions: Python 3.6

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue32040>
_______________________________________


More information about the New-bugs-announce mailing list