Prev: iglob performance no better than glob
Next: Meet Arab, Russian, American Singles From All Over The World
From: W. eWatson on 31 Jan 2010 13:10 I'm sure that \\ is used in some way for paths in Win Python, but I have not found anything after quite a search. I even have a six page pdf on a file tutorial. Nothing. Two books. Nothing. When I try to open a file along do I need, for example, "Events\\record\\year\\today"? Are paths like, ".\\Events" allowed, or am I mixing up my Linux memory on this?
From: Alf P. Steinbach on 31 Jan 2010 13:23 * W. eWatson: > I'm sure that \\ is used in some way for paths in Win Python, but I have > not found anything after quite a search. I even have a six page pdf on a > file tutorial. Nothing. Two books. Nothing. When I try to open a file > along do I need, for example, "Events\\record\\year\\today"? Are paths > like, ".\\Events" allowed, or am I mixing up my Linux memory on this? The Python issue with \\ is that in a literal string \\ denotes a single \ character, like >>> print( "back\\slash" ) back\slash >>> _ This is just like in other languages with syntax inherited from C. Look up "escape sequences". It has nothing to do with files and paths per se, but means that you cannot write e.g. "c:\windows\system32", but must write something like "c:\\windows\\system32" (try to print that string), or, since Windows handles forward slashes as well, you can write "c:/windows/system32" :-). The Window issue with \\ is that \\ as a path prefix denotes an UNC (Universal Naming Convention) path. Usually that would be a LAN or WAN network path, but it can also denote a printer or a pipe or a mailslot or just about anything. Using UNC paths opens the door to creating files and directories that other programs won't be able to handle, so Just Say No(TM), if you can. Cheers & hth., - Alf
From: Steve Holden on 31 Jan 2010 13:26 W. eWatson wrote: > I'm sure that \\ is used in some way for paths in Win Python, but I have > not found anything after quite a search. I even have a six page pdf on a > file tutorial. Nothing. Two books. Nothing. When I try to open a file > along do I need, for example, "Events\\record\\year\\today"? Are paths > like, ".\\Events" allowed, or am I mixing up my Linux memory on this? You need to read up on string literals is all. "\\" is simply the literal representation of a string containing a single backslash. This comes about because string literals are allowed to contain special "escape sequences" which are introduced by a backslash; since this gives the backslash a special meaning in string literals we also have to use an escape sequence ("\\") to represent a backslash. In practice you will find that a) Many Windows APIs (but not the command line) are just as happy with a forward slash as a backslash to separate file path components; and b) The best practice is to build filenames using the routines provided in the os.path module, which guarantees to give results correct for the current platform. regards Steve -- Steve Holden +1 571 484 6266 +1 800 494 3119 PyCon is coming! Atlanta, Feb 2010 http://us.pycon.org/ Holden Web LLC http://www.holdenweb.com/ UPCOMING EVENTS: http://holdenweb.eventbrite.com/
From: W. eWatson on 31 Jan 2010 13:42 Alf P. Steinbach wrote: > * W. eWatson: >> I'm sure that \\ is used in some way for paths in Win Python, but I >> have not found anything after quite a search. I even have a six page >> pdf on a file tutorial. Nothing. Two books. Nothing. When I try to >> open a file along do I need, for example, >> "Events\\record\\year\\today"? Are paths like, ".\\Events" allowed, or >> am I mixing up my Linux memory on this? > > The Python issue with \\ is that in a literal string \\ denotes a single > \ character, like > > >>> print( "back\\slash" ) > back\slash > >>> _ > > This is just like in other languages with syntax inherited from C. Look > up "escape sequences". It has nothing to do with files and paths per se, > but means that you cannot write e.g. "c:\windows\system32", but must > write something like "c:\\windows\\system32" (try to print that string), > or, since Windows handles forward slashes as well, you can write > "c:/windows/system32" :-). > > The Window issue with \\ is that \\ as a path prefix denotes an UNC > (Universal Naming Convention) path. Usually that would be a LAN or WAN > network path, but it can also denote a printer or a pipe or a mailslot > or just about anything. Using UNC paths opens the door to creating files > and directories that other programs won't be able to handle, so Just Say > No(TM), if you can. > > > Cheers & hth., > > - Alf Ah, yes. Thanks for the memory jog.
From: Tim Chase on 31 Jan 2010 14:41 Alf P. Steinbach wrote: > that you cannot write e.g. "c:\windows\system32", but must > write something like "c:\\windows\\system32" (try to print > that string), or, since Windows handles forward slashes as > well, you can write "c:/windows/system32" :-). Forward slashes work for some relative paths for some commands but not for others like absolute non-drive-specified paths: Microsoft Windows XP [Version 5.1.2600] C:\>md abc C:\>md abc\123 C:\>md abc\234 C:\>cd abc C:\abc>tree /f /a Folder PATH listing Volume serial number is 940C-3F80 C:. +---123 | \---234 \---234 C:\abc>cd 123 C:\abc\123>cd ../234 C:\abc\234>type ../123/234/hello.txt The syntax of the command is incorrect. C:\abc\234>cd ../123 C:\abc\123>cd /abc/123 The system cannot find the path specified. C:\abc>x: X:\>type c:/abc/123/234/hello.txt The syntax of the command is incorrect. ##### The previous absolute-path fails in cmd.exe for a variety of apps because the "/" is treated as a parameter/switch to the various programs. Fortunately, the Python path-handling sub-system is smart enough to do the right thing, even when Win32's internal handling is too dumb to behave: C:\abc\123>echo hello > 234/hello.txt C:\abc\123>cd .. C:\abc>tree /f /a Folder PATH listing Volume serial number is 940C-3F80 C:. +---123 | \---234 | hello.txt | \---234 C:\abc>python Python 2.4.3 (#69, Mar 29 2006, 17:35:34) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> file('/abc/123/234/hello.txt').read() 'hello \n' So as long as you stick within Python's insulation, forward slashes are a nice solution. But if you have to interact with external programs, use the \\ notation or raw strings: pth = r"c:\windows\system32" [mutters under breath about Win32 headaches] -tkc
|
Next
|
Last
Pages: 1 2 3 Prev: iglob performance no better than glob Next: Meet Arab, Russian, American Singles From All Over The World |