开发者

Return value of os.path in Python

开发者 https://www.devze.com 2022-12-14 18:41 出处:网络
For this code: import os a=os.path.join(\'dsa\',\'wqqqq\',\'ffff\') print a print os.path.exists(\'dsa\\wqqqq\\ffff\') #what situa开发者_开发百科tion this will be print True?

For this code:

import os
a=os.path.join('dsa','wqqqq','ffff')
print a
print os.path.exists('dsa\wqqqq\ffff') #what situa开发者_开发百科tion this will be print True?

When will os.path.exists('what') print True?


'dsa\wqqqq\ffff' does not mean what you probably think it does: \f, within a string, is an escape sequence and expands to the same character as chr(12) (ASCII "form feed").

So print os.path.exists('dsa\wqqqq\ffff') will print True if:

  • on Windows, there's a subdirectory dsa in the current working directory, and within it a file or subdirectory whose name is equal to the string `'wqqqq' + chr(12) + 'fff'
  • on Linux, Mac, etc, if there's a file or subdirectory in the current directory whose name is equal to the string `'dsa' + '\' + 'wqqqq' + chr(12) + 'fff'

They seem like two peculiar conditions to check, and that you actually want to check their combination depending on the platform seems even less likely.

More likely you might want to

print os.path.exists(os.path.join('dsa', 'wqqqq', 'ffff'))

which works cross-platform, printing True if in the current working directory there's a subdirectory dsa containing a subdirectory wqqqq containing a file or subdirectory ffff. This avoids messing with backslashes.

If you're keen to have your code perform this check only on Windows (and have very different semantics on all other platforms), you can use

print os.path.exists(r'dsa\wqqqq\ffff')

the leading r in the string literal tells the Python compiler to avoid interpreting backslashes in it (however, don't try to end such a literal with backslash, since the backslash is still taken to escape the quote). Or:

print os.path.exists('dsa\\wqqqq\\ffff')

doubling-up the backslashes works. Note, also, that:

print os.path.exists('dsa/wqqqq/ffff')

with normal slashes instead of backslashes, works just fine in BOTH Windows and elsewhere (which makes it particularly absurd to want to use backslashes here, unless one is deliberately trying to obtain a program that behaves weirdly on non-Windows machines).

The much-simpler other question which you ask in the text after your code is easier: os.path.exists('what'), on any platform, prints True if there is a file or subdirectory named what in the current working directory.


Return True if path refers to an existing path. Returns False for broken symbolic links. On some platforms, this function may return False if permission is not granted to execute os.stat() on the requested file, even if the path physically exists.

http://docs.python.org/library/os.path.html#os.path.exists


It will print True if the path exists. Not sure what the confusion is, here. Not to be rude, but RTFM.

% mkdir -p dsa/wqqqq/ffff
% cat <<EOF | python
> import os
> a=os.path.join('dsa','wqqqq','ffff')
> print a
> print os.path.exists('dsa/wqqqq/ffff')
> EOF
dsa/wqqqq/ffff
True
0

精彩评论

暂无评论...
验证码 换一张
取 消