This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author brice.gros
Recipients brice.gros, paul.moore, steve.dower, tim.golden, zach.ware
Date 2017-08-14.13:57:31
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1502719052.2.0.11123711046.issue31202@psf.upfronthosting.co.za>
In-reply-to
Content
Windows pathlib.Path.glob(pattern) fixed part of the pattern to lowercase whereas it should be unchanged.
Note that this issue is different from http://bugs.python.org/issue26655 : "pathlib glob case sensitivity issue on Windows" where it was asked to get the actual case of the folder from the file system.

Assuming a directory contains a folder named 'Folder'.
On Windows, calling pathlib.Path().glob('Folder') gives 'folder', but 'Folde?' will return 'Folder'
This is an issue for instance if trying to glob files to put them in an archive to be sent to a case sensitive platform.
glob.glob() does behave properly though, Windows pathlib.Path is the only platform which has such a behavior.

I would expect Path.glob to output the same as glob.glob() for each platform.
From comments on http://bugs.python.org/issue19718 : "Path.glob() on case-insensitive Posix filesystems" it sounds that it should even match the native shell behavior.
And it looks like it is the case for linux and macOS, I tested that with the following script, whose results on win32, darwin and linux platforms follow:

```
#!/usr/bin/env python3.6
# Let's say this path exists : ./Folder/file
from pathlib import Path
import glob
import os
import sys
import subprocess

def ls(pattern):
    if sys.platform in ('win32', 'win64'):
        process = subprocess.run(['powershell', '-Command', f'dir {pattern}'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=os.getcwd(), encoding='utf-8')
        if process.returncode:
            return []
        # expected output:
        # 
        # 
        #     Directory: C:\path_to\Folder
        # 
        # 
        # Mode                LastWriteTime         Length Name
        # ----                -------------         ------ ----
        # -a----       2017-08-14     10:16              0 file
        lines = process.stdout.splitlines()
        folder = os.path.basename(lines[2].split()[-1])
        file = lines[7].split()[-1]
        result = f"{folder}{os.path.sep}{file}"
        return [result]
    else:
        cmd = ['ls', f'{pattern}']
        process = subprocess.run(' '.join(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=os.getcwd(), encoding='utf-8', shell=True)
        if process.returncode:
            return []
        return [process.stdout.strip()]

def main():
    print(sys.platform)
    p = Path('.')
    tests = ['Folder/*', 'FOlder/*', 'F?lder/*', 'FOlde?/*', 'folder/*', 'f?lder/*']
    for t in tests:
        print(f'{t}:')
        print(f'    Path.glob():  {[str(f) for f in p.glob(t)]}')
        print(f'    glob.glob():  {[f for f in glob.glob(str(p/t))]}')
        print(f'    shell:        {ls(str(p/t))}')

if __name__ == '__main__':
    main()
```

```
Output:
        win32                                            darwin                                        linux
1:      Folder/*:                                        Folder/*:                                     Folder/*:
1a:         Path.glob():  ['folder\\file']                   Path.glob():  ['Folder/file']                 Path.glob():  ['Folder/file']
1b:         glob.glob():  ['Folder\\file']                   glob.glob():  ['Folder/file']                 glob.glob():  ['Folder/file']
1c:         shell:        ['Folder\\file']                   shell:        ['Folder/file']                 shell:        ['Folder/file']
2:      FOlder/*:                                        FOlder/*:                                     FOlder/*:
2a:         Path.glob():  ['folder\\file']                   Path.glob():  ['FOlder/file']                 Path.glob():  []
2b:         glob.glob():  ['FOlder\\file']                   glob.glob():  ['FOlder/file']                 glob.glob():  []
2c:         shell:        ['FOlder\\file']                   shell:        ['FOlder/file']                 shell:        []
3:      F?lder/*:                                        F?lder/*:                                     F?lder/*:
3a:         Path.glob():  ['Folder\\file']                   Path.glob():  ['Folder/file']                 Path.glob():  ['Folder/file']
3b:         glob.glob():  ['Folder\\file']                   glob.glob():  ['Folder/file']                 glob.glob():  ['Folder/file']
3c:         shell:        ['Folder\\file']                   shell:        ['Folder/file']                 shell:        ['Folder/file']
4:      FOlde?/*:                                        FOlde?/*:                                     FOlde?/*:
4a:         Path.glob():  ['Folder\\file']                   Path.glob():  []                              Path.glob():  []
4b:         glob.glob():  ['Folder\\file']                   glob.glob():  []                              glob.glob():  []
4c:         shell:        ['Folder\\file']                   shell:        []                              shell:        []
5:      folder/*:                                        folder/*:                                     folder/*:
5a:         Path.glob():  ['folder\\file']                   Path.glob():  ['folder/file']                 Path.glob():  []
5b:         glob.glob():  ['folder\\file']                   glob.glob():  ['folder/file']                 glob.glob():  []
5c:         shell:        ['folder\\file']                   shell:        ['folder/file']                 shell:        []
6:      f?lder/*:                                        f?lder/*:                                     f?lder/*:
6a:         Path.glob():  ['Folder\\file']                   Path.glob():  []                              Path.glob():  []
6b:         glob.glob():  ['Folder\\file']                   glob.glob():  []                              glob.glob():  []
6c:         shell:        ['Folder\\file']                   shell:        []                              shell:        []
```
History
Date User Action Args
2017-08-14 13:57:32brice.grossetrecipients: + brice.gros, paul.moore, tim.golden, zach.ware, steve.dower
2017-08-14 13:57:32brice.grossetmessageid: <1502719052.2.0.11123711046.issue31202@psf.upfronthosting.co.za>
2017-08-14 13:57:31brice.groslinkissue31202 messages
2017-08-14 13:57:31brice.groscreate