[Python-Dev] Obtaining short file path

Ulrich Berning ulrich.berning at denviso.de
Fri May 30 09:10:51 CEST 2008


Hartwell Bryan wrote:

> Hi,
>
> Purpose: obtaining the system (“short”) path from a full path
>
> Background: File dialogs (visual studio) return a full path (e.g. 
> f=“C:\this path has spaces\thisfilenameislongerthan8char.txt”). If 
> this value is provided to Python, it will not recongize this as a 
> file. In fact os.path.isfile(f) doesn’t return false, it crashes. 
> Likewise, when calling executables (from Python) with files as 
> arguments a short path is required. VB FileSystemObject has the 
> ShortPath method, while os.path and path (www.jorendorff.com) modules 
> do not (at least as far as my googling could determine). Why bother 
> creating a COM interface when you’re just going to pass as shell 
> run-time arguments all the values the server is better at computing?
>
> System: Python 2.3; Windows XP
>
> Sample Code:
>
> import win32com.client
>
> import time
>
> import os,sys
>
> import os.path
>
> #-------------------------------------------------------------
>
> def shortpath(x):
>
> z=''
>
> for y in x.split('\\'):
>
> if len(y.split('.')[0])>8:
>
> if ('.' in y):
>
> z=z+'\\'+y.split('.')[0][:6].upper()+'~1'+'.'+y.split('.')[1]
>
> else:
>
> z=z+'\\'+y[:6].upper()+'~1'
>
> else:
>
> z=z+'\\'+y
>
> return z[1:]
>
> #-------------------------------------------------------------
>
> xlApp = win32com.client.Dispatch("Excel.Application")
>
> xlBook = xlApp.ActiveWorkbook
>
> savFile = str(sys.argv[1])
>
> rawFile = str(xlBook.Sheets("Timestamp").TextBox2)
>
> #print os.path.isfile(savFile)
>
> r=shortpath(rawFile)
>
> print r
>
> try:
>
> print os.path.isfile(r)
>
> except:
>
> print 'something rude'
>
> time.sleep(7)
>
> Notes: This code does not account for peer paths or files that share 
> the first 8 characters (and file extension). I’m also aware that this 
> is not the normal means for submitting a “patch”, but in my job 
> function I don’t see myself regularly participating in python 
> development (and I’m probably not savvy enough) so the effort wasn’t 
> worth it. However I still thought others might benefit from what seems 
> to be (to me) a fundamental path function. Do with it, or ignore it, 
> as you please.
>
> Cheers,
>
> Bryan Hartwell
>
> ------------------------------------------------------------------------
>
> This message is intended only for the use of the intended recipients, 
> and it may be privileged and confidential. If you are not the intended 
> recipient, you are hereby notified that any review, retransmission, 
> conversion to hard copy, copying, circulation or other use of this 
> message is strictly prohibited. If you are not the intended recipient, 
> please notify me immediately by return e-mail, and delete this message 
> from your system.
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Python-Dev mailing list
>Python-Dev at python.org
>http://mail.python.org/mailman/listinfo/python-dev
>Unsubscribe: http://mail.python.org/mailman/options/python-dev/ulrich.berning%40denviso.de
>  
>
Why not win32api.GetShortPathName() and win32api.GetFullPathName()?

 >>> import os, win32api
 >>> path = "C:\\this path has spaces\\thisfilehasmorethan8char.txt"
 >>> short_path = win32api.GetShortPathName(path)
 >>> short_path
'C:\\THISPA~1\\THISFI~1.TXT'
 >>> os.path.isfile(short_path)
True
 >>> full_path = win32api.GetLongPathName(short_path)
 >>> full_path
'C:\\this path has spaces\\thisfilehasmorethan8char.txt'
 >>> os.path.isfile(full_path)
True
 >>> path == full_path
True
 >>>

Ulli




More information about the Python-Dev mailing list