On 09/09/2018 02:20 PM, Gilmeh Serda wrote:

# Python 3.6.1/Linux
(acts the same in Python 2.7.3 also, by the way)

from glob import glob

glob('./Testfile *')
['./Testfile [comment] some text.txt']

glob('./Testfile [comment]*')
[]

glob('./Testfile [comment? some text.*')
['./Testfile [comment] some text.txt']

glob('./Testfile [comment[]*')
['./Testfile [comment] some text.txt']

glob('./Testfile [comment[] some text.*')
[]

Testing:

fnmatch.translate('./Testfile [comment] some text.*')
'(?s:\\.\\/Testfile\\ [comment]\\ some\\ text\\..*)\\Z'

fnmatch.translate('./Testfile [comment? some text.*')
'(?s:\\.\\/Testfile\\ \\[comment.\\ some\\ text\\..*)\\Z'

It seems it translates [comments] as a set of valid characters to look
for and doesn't care about the [] characters, which is what breaks it, I
assume.

? translates into RegEx .
* translates into RegEx .*

And escaping doesn't work either, because:

https://docs.python.org/3/library/glob.html#glob.escape demonstrates a way of escaping that works:

glob('./Testfile [[]comment]*')


fnmatch.translate('./Testfile [comment\] some text.*')
'(?s:\\.\\/Testfile\\ [comment\\\\]\\ some\\ text\\..*)\\Z'

...the \ is replaced with \\ which breaks the pattern since it is no
longer a real escape character but an escaped escape character, if that
makes sense.

When the file name has a non working RegEx set, e.g., './Testfile
comment]*' it works.

Yes, easy to say "don't write that into file names," but I don't make the
rules.

I guess I have to write my own.

Oh, well...


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to