python学习笔记:2011/9/23《pyton基础教程》和《python核心教程》交叉阅读。
专题一:文件和输入输出
1:打印语句可以用 % 来替换语句。例如
print "%s is number of %d" % ("Python", 1)
还可以重定向输出:(相对路径的问题)
logfile = open("D:\WorkSpace\TextToHTML\src\log.txt" ,'a') print >> logfile, "what is that?"
2:打开文件的模式
r,w,a最常用,分别表示读、写、追加。其中r和w必须在文件存在的情况下用。而w模式打开的文件
如果已经存在就先清空里面的内容。
3:其它的几种读的方法
a:readline()表示的是读取一行
logfile = open("D:\WorkSpace\TextToHTML\src\log.txt" ,'r') print logfile.readline()
b:read(n)方法,可以指定读多少字节
print logfile.read(2)
c:read()方法,可以把文件全部都读进来
print logfile.read()
d:readlines()方法,按照行,把每一行都读进来
logfile = open("D:\WorkSpace\TextToHTML\src\log.txt" ,'r') alllines = logfile.readlines() logfile.close() for eachline in alllines:
print eachline
但是现在对于文件对象本身也可以迭代,非常简单的如下:
logfile = open("D:\WorkSpace\TextToHTML\src\log.txt" ,'r') for eachline in logfile: print eachline logfile.close()
4:相对应的写方法
5:print语句会在输出内容末尾自动的加上一个换行符,在语句后面加上一个逗号就勊避免这个行为
所以,省略逗号后,显示出来的文本都是两个空行,一个是输入自带的,另外一个是print语句自动添加的。
6:小例子
a:对每一个字符进行循环
logfile = open("D:\WorkSpace\TextToHTML\src\log.txt" ,'r') char = logfile.read(1) while char: print char char = logfile.read(1) logfile.close()
b:可以优化为下面的代码
logfile = open("D:\WorkSpace\TextToHTML\src\log.txt" ,'r') while True: char = logfile.read(1) if not char:break print char logfile.close()
c:读行
logfile = open("D:\WorkSpace\TextToHTML\src\log.txt" ,'r') while True: line = logfile.readline() if not line:break print line, logfile.close()
7:对于文件操作的整个大例子
''' Created on 2011-9-23 @author: xgzhao ''' import os for temdir in ('/tem', r'C:\tem'): if os.path.isdir(temdir): break else: print 'no tempary directory available' temdir = '' if temdir: #每次用一个目录的时候一定要调用chdir方法,就像在mysql里面使用数据库一样。 os.chdir(temdir) #得到当前目录 cwd = os.getcwd() print "****current directory" print cwd print "****creating example directory" #在当前目录下创建目录 os.makedirs('example') #使用example目录 os.chdir('example') cwd = os.getcwd() print "***new working directory" print cwd print "***original directory listing" #列出当前目录下的文件 print os.listdir(cwd) print "****creating test file" #创建文件,并写入两行 fobj = open("test", "w") fobj.write("foo\n") fobj.write("bar\n") fobj.close() print "***updated directory listing" print os.listdir(cwd) print "***renaming test to filetest.txt" #重命名文件 os.rename('test', 'filetest.txt') print "***updated directory listing" print os.listdir(cwd) #把路径和目录下面的文件结合起来,就是绝对路径 path = os.path.join(cwd, os.listdir(cwd)[0]) print "***full file pathname" print path print "***(pathname, basename)==" #把路径和文件分开 print os.path.split(path) print "****(filename, extension)==" #把文件的名字和扩展分开 print os.path.splitext(os.path.basename(path)) print "****displaying file contents" fobj = open(path) for eachline in fobj: print eachline fobj.close() print "***delete testing file" #把当前目录下的文件删除 os.remove(path) print "***updating directory path" print os.listdir(cwd) os.chdir(os.pardir) print "***delete test directory" #删除文件夹 os.rmdir('example') print "***done" 输出结果是:
****current directory C:\tem ****creating example directory ***new working directory C:\tem\example ***original directory listing [] ****creating test file ***updated directory listing ['test'] ***renaming test to filetest.txt ***updated directory listing ['filetest.txt'] ***full file pathname C:\tem\example\filetest.txt ***(pathname, basename)== ('C:\\tem\\example', 'filetest.txt') ****(filename, extension)== ('filetest', '.txt') ****displaying file contents foo bar ***delete testing file ***updating directory path [] ***delete test directory ***done