来源于Python核心编程第二版本,此随笔只是为了让自己加深印象。
环境 OS X Python版本2.7.10
1 #!/usr/bin/env python 2 #--*-- coding:utf-8 --*-- 3 4 'makeTextFile.py -- Create text file' 5 6 import os 7 ls = os.linesep 8 fname = 'test' 9 #get filename 10 while True: 11 if os.path.exists(fname): 12 print "ERROR: '%s' already exists"%fname 13 else: 14 break 15 16 #get file content (text) lines 17 all = [] 18 print "\nEnter lines('.' by itself to quit).\n" 19 20 #loop until user terminates input 21 while True: 22 entry = raw_input('>') 23 if entry == '.': 24 break 25 else: 26 all.append(entry) 27 28 #write lines to file with proper line-ending 29 fobj = open(fname,'w') 30 fobj.writelines(['%s%s'%(x,ls) for x in all]) 31 fobj.close() 32 print 'Done!'
运行结果
核心技巧:使用局部变量替换模块变量
类似os.linesep这样的名字需要解释器做两次查询 (1)查找os以确认它是一个模块 (2)在这个模块中查找linesep变量。因为模块也是全局变量,我们多消耗系统资源
如果你频繁使用一个属性,建议为该属性取一个本地变量别名。变量再查找速度将会快很多!
os.path.exists()是os模块中一个函数,当有输入一个不存在的文件名时候 会返回False。
fobj.writelines(['%s%s'%(x,ls) for x in all]) 这种结构叫做列表解析。
'%s%s'为每一行添加行结束符,(x,ls)表示每一行及其行结束符,对于Unix平台是'\n' 对于DOS或WIN32则是'\r\n'
通过使用os.linesep我们不需要考虑程序运行在什么平台,也不需要根据平台决定使用哪种行结束符。文件对象writeline()方法接收包含结束符的结果列表,并将
其写入文件
读取文件操作
1 #!/usr/bin/env python 2 #--*-- coding:utf-8 --*-- 3 'readTextFile.py -- read and display text file' 4 5 #get filename 6 fname = raw_input('Enter filename:') 7 8 #attempt to open file for reading 9 try: 10 fobj = open(fname,'r') 11 except IOError,e: 12 print "*** file open error:",e 13 else: 14 #display contents to the screen 15 for eachline in fobj: 16 print eachline, 17 fobj.close() 18
raw_input() 获取用户输入的文件名
打开文件 ,利用for循环进行读取并显示 Simple stuff...