#! /usr/bin/env python3

"""
waFile
=======================

Deals with simple file processing

"""
# NOTE: the actual command documentation is collected from docstrings of the
# commands and is appended to __doc__ after the class has been defined.
"""
Revisions
=================
151104 LoadText, SaveText
151209 *Find*,*Join*
160202 *uigetfullfile*
180211 updated .Join to support multiple paths, conform with os.path.join
180315 added uigetfulldir
180317 modifed Join to account for /
    fixed uigetfulldir
180318 fixed Join
180320 fixed Join again, 3.4.3 does not support (path,*name)
180408 use io instead of codecs for automatic \n conversion, also specify utf-8
"""
import os
import codecs
def LoadText(filename):
        '''Load text from *filename*
    '''
        #f=codecs.open(filename, 'r')
        import io
        with io.open(filename,'r',encoding='utf-8') as f:
                s=f.read()
        return s

def SaveText(filename,s):
        '''Save string *s* to filename
'''
        #f=codecs.open(filename, 'w')
        import io
        with io.open(filename,'w',encoding='utf-8') as f:
                s=f.write(s)

def GetFilename(fullfile):
        '''Get the file name from *fullfile* name
'''
        return os.path.split(fullfile)[-1]
def GetFolderName(fullfile):
        return os.path.dirname(fullfile)
def GetExtension(filename):
        '''Get the extension
'''
        f=GetFilename(filename)
        i=f.rfind('.')
        if i==-1:
                return ''
        else:
                return f[i:]
def Find(name):
        ''' Find and return the fullname within os.sys.path if the name exists
including .pth files
if not found, return None
'''
        for d in os.sys.path:
                if os.path.exists(os.path.join(d,name)):
                        return os.path.join(d,name);
                elif os.path.isdir(d):
                        #search .pth files
                        if d!='':
                                ds=os.listdir(d)
                        else:
                                ds=os.listdir()
                        for p in ds:
                                if GetExtension(p)=='.pth':
                                        d2=LoadText(os.path.join(d,p))
                                        if os.path.exists(os.path.join(d2,name)):
                                                return os.path.join(d2,name)
        return None
                                        
def Join(path,*name):
        ''' os.path.join
'''
        if '/' in path:
            names=[path]
            names.extend(name)
            return '/'.join(names)
        else:
            return os.path.join(path,*name)
import tkinter as tk
from tkinter import filedialog
def uigetfullfile(basefilename=''):
        '''Act like uigetfile in matlab, returned filename can be multiple
'''
        d=GetFolderName(basefilename)
        root=tk.Tk()
        root.withdraw()
        if len(d)>0:
                file=filedialog.askopenfilenames(initialdir=d)
        else:
                file=filedialog.askopenfilenames()
        fns=root.tk.splitlist(file)
        return fns
    
def uigetfulldir(basename=''):
        #d=GetFolderName(basefilename)
        root=tk.Tk()
        root.withdraw()
        if basename:
                pth=filedialog.askdirectory(initialdir=basename)
        else:
                pth=filedialog.askdirectory()
        return pth

#! /usr/bin/env python3

"""
waFile
=======================

Deals with simple file processing

"""
# NOTE: the actual command documentation is collected from docstrings of the
# commands and is appended to __doc__ after the class has been defined.
"""
Revisions
=================
151104 LoadText, SaveText
151209 *Find*,*Join*
160202 *uigetfullfile*
180211 updated .Join to support multiple paths, conform with os.path.join
180315 added uigetfulldir
180317 modifed Join to account for /
    fixed uigetfulldir
180318 fixed Join
180320 fixed Join again, 3.4.3 does not support (path,*name)
180408 use io instead of codecs for automatic \n conversion, also specify utf-8
"""
import os
import codecs
def LoadText(filename):
        '''Load text from *filename*
    '''
        #f=codecs.open(filename, 'r')
        import io
        with io.open(filename,'r',encoding='utf-8') as f:
                s=f.read()
        return s

def SaveText(filename,s):
        '''Save string *s* to filename
'''
        #f=codecs.open(filename, 'w')
        import io
        with io.open(filename,'w',encoding='utf-8') as f:
                s=f.write(s)

def GetFilename(fullfile):
        '''Get the file name from *fullfile* name
'''
        return os.path.split(fullfile)[-1]
def GetFolderName(fullfile):
        return os.path.dirname(fullfile)
def GetExtension(filename):
        '''Get the extension
'''
        f=GetFilename(filename)
        i=f.rfind('.')
        if i==-1:
                return ''
        else:
                return f[i:]
def Find(name):
        ''' Find and return the fullname within os.sys.path if the name exists
including .pth files
if not found, return None
'''
        for d in os.sys.path:
                if os.path.exists(os.path.join(d,name)):
                        return os.path.join(d,name);
                elif os.path.isdir(d):
                        #search .pth files
                        if d!='':
                                ds=os.listdir(d)
                        else:
                                ds=os.listdir()
                        for p in ds:
                                if GetExtension(p)=='.pth':
                                        d2=LoadText(os.path.join(d,p))
                                        if os.path.exists(os.path.join(d2,name)):
                                                return os.path.join(d2,name)
        return None
                                        
def Join(path,*name):
        ''' os.path.join
'''
        if '/' in path:
            names=[path]
            names.extend(name)
            return '/'.join(names)
        else:
            return os.path.join(path,*name)
import tkinter as tk
from tkinter import filedialog
def uigetfullfile(basefilename=''):
        '''Act like uigetfile in matlab, returned filename can be multiple
'''
        d=GetFolderName(basefilename)
        root=tk.Tk()
        root.withdraw()
        if len(d)>0:
                file=filedialog.askopenfilenames(initialdir=d)
        else:
                file=filedialog.askopenfilenames()
        fns=root.tk.splitlist(file)
        return fns
    
def uigetfulldir(basename=''):
        #d=GetFolderName(basefilename)
        root=tk.Tk()
        root.withdraw()
        if basename:
                pth=filedialog.askdirectory(initialdir=basename)
        else:
                pth=filedialog.askdirectory()
        return pth

#! /usr/bin/env python3 waFile =======================  Deals with simple file processing # NOTE: the actual command documentation is collected from docstrings of the # commands and is appended to __doc__ after the class has been defined. Revisions ================= 151104 LoadText, SaveText 151209 *Find*,*Join* 160202 *uigetfullfile* 180211 updated .Join to support multiple paths, conform with os.path.join 180315 added uigetfulldir 180317 modifed Join to account for /     fixed uigetfulldir 180318 fixed Join 180320 fixed Join again, 3.4.3 does not support (path,*name) 180408 use io instead of codecs for automatic \n conversion, also specify utf-8 Load text from *filename* #f=codecs.open(filename, 'r') Save string *s* to filename #f=codecs.open(filename, 'w') Get the file name from *fullfile* name Get the extension Find and return the fullname within os.sys.path if the name exists including .pth files if not found, return None #search .pth files os.path.join Act like uigetfile in matlab, returned filename can be multiple #d=GetFolderName(basefilename)