Case insensitive exists()?

Larry Martell larry.martell at gmail.com
Wed Jan 22 20:18:32 EST 2014


On Wed, Jan 22, 2014 at 6:08 PM, Roy Smith <roy at panix.com> wrote:
> In article <mailman.5853.1390438708.18130.python-list at python.org>,
>  Larry Martell <larry.martell at gmail.com> wrote:
>
>> I have the need to check for a files existence against a string, but I
>> need to do case-insensitively. I cannot efficiently get the name of
>> every file in the dir and compare each with my string using lower(),
>> as I have 100's of strings to check for, each in a different dir, and
>> each dir can have 100's of files in it.
>
> I'm not quite sure what you're asking.  Do you need to match the
> filename, or find the string in the contents of the file?  I'm going to
> assume you're asking the former.

Yes, match the file names. e.g. if my match string is "ABC" and
there's a file named "Abc" then it would be match.

> One way or another, you need to iterate over all the directories and get
> all the filenames in each.  The time to do that is going to totally
> swamp any processing you do in terms of converting to lower case and
> comparing to some set of strings.
>
> I would put all my strings into a set, then use os.walk() traverse the
> directories and for each path os.walk() returns, do "path.lower() in
> strings".

The issue is that I run a database query and get back rows, each with
a file path (each in a different dir). And I have to check to see if
that file exists. Each is a separate search with no correlation to the
others. I have the full path, so I guess I'll have to do dir name on
it, then a listdir then compare each item with .lower with my string
.lower. It's just that the dirs have 100's and 100's of files so I'm
really worried about efficiency.



More information about the Python-list mailing list