def read_file(filename): '''Tries to read a given file Returns None if an error is encountered ''' encodings = ['utf-8'] try: import chardet except ImportError: logging.info("chardet not found. 'utf-8' encoding will be assumed") chardet = None if False and chardet: with open(filename, 'rb') as file: content = file.read() guess = chardet.detect(content) logging.info('Chardet guesses %s for %s' % (guess, filename)) encoding = guess.get('encoding') # chardet makes errors here sometimes if encoding in ['MacCyrillic', 'ISO-8859-7']: encoding = 'ISO-8859-2' if encoding: encodings.insert(0, encoding) # Only check the first encoding for encoding in encodings[:1]: try: # codecs.open returns a file object that can write unicode objects # and whose read() method also returns unicode objects # Internally we want to have unicode only with codecs.open(filename, 'rb', encoding=encoding, errors='replace') as file: data = file.read() return data except ValueError, err: logging.info(err) except Exception, e: logging.error(e) return ''
读文件,主要是处理了不同平台的不同编码。。。
写文件,创建文件,一些目录操作。
def write_file(filename, content): assert os.path.isabs(filename) try: with codecs.open(filename, 'wb', errors='replace', encoding='utf-8') as file: file.write(content) except IOError, e: logging.error('Error while writing to "%s": %s' % (filename, e)) def make_directory(dir): if not os.path.isdir(dir): os.makedirs(dir) def make_directories(dirs): for dir in dirs: make_directory(dir) def make_file(file, content=''): if not os.path.isfile(file): write_file(file, content) def make_files(file_content_pairs): for file, content in file_content_pairs: make_file(file, content) def make_file_with_dir(file, content): dir = os.path.dirname(file) make_directory(dir) make_file(file, content)
得到相对路径:(1,平台问题,2,python版本问题)
def get_relative_path(from_dir, to_dir): ''' Try getting the relative path from from_dir to to_dir The relpath method is only available in python >= 2.6 if we run python <= 2.5, return the absolute path to to_dir ''' if getattr(os.path, 'relpath', None): # If the data is saved on two different windows partitions, # return absolute path to to_dir drive1, tail = os.path.splitdrive(from_dir) drive2, tail = os.path.splitdrive(to_dir) # drive1 and drive2 are always empty strings on Unix if not drive1.upper() == drive2.upper(): return to_dir return os.path.relpath(to_dir, from_dir) else: return to_dir
python path_relpath.py From path: /home/nn/Study To path: /home/nn/Work DIR : ../Work