Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 Version of glob for that Supports Windows Wildcards?
#1
Is there a Python module that works like glob except that it works properly on Windows?

Here's the problem. Windows recognizes "?" and "*" as wildcards. Windows does NOT recognize "[" or "]" as special characters, whereas glob uses them to denote character classes. Many of my scripts are set to operate on either a file or a file pattern. Technically all file names are patterns. They are just patterns that match at most one file. So a loop like

for file in glob.glob(pattern):

works just fine under Windows as long as an actual pattern with a wildcard is given. It fails when

1. a non-wildcard filename is given and
2. that filename contains "[" or "]"

If my folder contains the files

Awards Day [1994].mp4
Betula Lake [1983].mp4
Piano Recital [1994].mp4

and my pattern is "Awards Day [1994].mp4" then the loop does not find the file. While glob provides the glob.escape method, it also escapes "?" and "*" thus making the Windows wildcards ineffective for pattern matching.

One "solution" which I expect someone to propose is to rename all my files to avoid the use of "[" or "]". This is not a solution. I should be allowed to use any valid character that Windows allows.
Quote
#2
I don't have a solution for you that I think is elegant, but you can can do something silly like
pattern.replace("[", "[[").replace("]", "]]")
to do the escaping you need.
Feel like you're not getting the answers you want? Checkout the help/rules for things like what to include/not include in a post, how to use code tags, how to ask smart questions, and more.

Pro-tip - there's an inverse correlation between the number of lines of code posted and my enthusiasm for helping with a question :)
Quote
#3
Write own regex,glob work many general cases(not for many different corner cases) with a set of predefined pattern eg *.txt is in regex .*\\.txt\\Z(?ms)

Can use eg os.scandir for looping over files,with own regex that match wanted files.
Example:
import os
import re

match = re.compile(r'.*\[\d+\].*').match
for fn in os.scandir('.'):
    if match(fn.name):
        print(fn.name)
Output:
Awards Day [1994].mp4 Betula Lake [1983].mp4 Piano Recital [1994].mp4
If i just comment out line 6,the read all files in folder.
Output:
Awards Day [1994].mp4 Betula Lake [1983].mp4 filename.csv file_reg.py foo.txt Piano Recital [1994].mp4 read_test.py
noisefloor likes this post
Quote
#4
As it turns out
pattern.replace("[", "[[").replace("]", "]]")
doesn't work, however
pattern.replace("[", "[[]")
does the trick. Thanks for the suggestion. Silly? Yes. Inelegant? Also yes, but it's short and I can easily tag it with a "#kludge" end-of-line comment so that if something more elegant comes along I can easily do a find/replace.
Quote
#5
Just use glob.escape, then you don't have to think about regex or escaping in source code.

In [1]: import glob                                                                                                             

In [2]: '*' + glob.escape('[') + '???' + glob.escape(']') + '*.mp3'                                                             
Out[2]: '*[[]???]*.mp3'
My code examples are always for Python >=3.6.0
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Quote
#6
Yeah. Tried that. Unfortunately, glob.escape also escapes "*" which means I can no longer use Windows/DOS wildcards in my file names.
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  [split] What version of python works on Windows Vista? tit 1 744 Oct-11-2018, 10:08 AM
Last Post: Larz60+
  nested for loops glob devenuro 3 749 Sep-20-2018, 09:54 PM
Last Post: ODIS
  Glob and automating help Thunberd 0 479 Jun-13-2018, 04:42 PM
Last Post: Thunberd
  install pip on windows box / version win 7 apollo 4 1,839 Feb-12-2018, 03:28 PM
Last Post: apollo
  Can I upload a new version without previously deleting ancient version sylas 6 1,107 Nov-08-2017, 03:26 PM
Last Post: Larz60+
  Adding regedit value to glob.glob AlterBlitz 2 1,156 May-18-2017, 09:09 PM
Last Post: nilamo
  glob for dir listing bluefrog 5 1,581 Mar-07-2017, 05:46 PM
Last Post: bluefrog

Forum Jump:


Users browsing this thread: 1 Guest(s)