Python---file
import locale import io import gzip import sys class RedirectStdoutTo: def __init__(self, out_new): self.out_new = out_new def __enter__(self): self.out_old=sys.stdout sys.stdout=self.out_new def __exit__(self,*args): sys.stdout=self.out_old ''' if one class has __enter__and __exit__, then it is context mamanger ''' def open1(path): file1=open(path, encoding='utf-8') print(file1.read()) print(file1.name) print(file1.mode) print(file1.encoding) print(file1.read()) print(file1.tell()) print(file1.seek(0)) print(file1.read(1)) print(file1.tell()) print(file1.read()) file1.close() print(file1.closed) def open2(path): print('===============open2=================') with open(path, encoding='utf-8') as file2: print(file2.read()) def open3(path): print('==============open3======================') linenm=0; with open(path, encoding='utf-8') as file3: for line1 in file3: linenm+=1 print('{:>4}{}'.format(linenm, line1.rstrip())) def open4(path): print('==============open4============================') with open(path, mode='a', encoding='utf-8') as file4: '''attention, w means rewrite, r means append''' file4.write('add new line\n') def open5(path): print('==============open5=================================') with open(path, mode='rb') as file5: '''no need pass encoding, because we're passing b--byte,binary''' print(file5.read(100)) def open6(): print('=============open6=========================================') string1='I want to make this string as file' file6=io.StringIO(string1) print(file6.tell()) print(file6.read()) def open7(path): print('===============open7=======================================') with gzip.open(path, mode='ab') as file7: file7.write('I add new line in gz file\n'.encode('utf-8')) def open8(path): print('=============open8====================================') with open(path, mode = 'a', encoding ='utf-8') as file8, RedirectStdoutTo(file8): print('haha, my print is appended into files, not in console\n') with open(path, mode = 'a', encoding ='utf-8') as file8: with RedirectStdoutTo(file8): print('haha, my print is appended into file again\n') ''' with can be without "as" open is an context manager, because open() api return stream, it is context manager implemented __enter__,__exit__ RedirectStdoutTo is also context manager ''' def getdefault(): print(locale.getpreferredencoding()) if __name__ == '__main__': getdefault() open1('file_util_m.txt') open2('file_util_m.txt') open3('file_util_m.txt') open4('file_util_m.txt') open5('metro.jpg') open6() open7('file.gz') open8('file_util_m.txt')