现在的位置: 首页 > 综合 > 正文

专题一:文件读写

2013年02月23日 ⁄ 综合 ⁄ 共 3322字 ⁄ 字号 评论关闭

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
    
    
    
    
    
    
    
    
    
    
    
    

抱歉!评论已关闭.