Python核心编程第九章笔记及习题记录[待更新]

第九章 文件和输入输出
1.open()函数
    内建函数 open()提供了初始化输入\输出操作的通用接口。open()成功打开文件后会返回一个文件对象,否则引发一个错误
   file_object=open(file_name,access_mode='r',buffering=-1)

   file_name是包含要打开的文件的名字字符串(可以是相对路径或绝对路径。)

   access_mode也是一个字符串,代表文件打开的模式(默认为‘r’)。(文件使用模式‘r’、‘w’、‘a’分别代表读取、写入、和追加,'U'代表通用换行符支持。)。
   ‘r’、‘U’模式打开的文件必须是已经存在的,‘w’模式打开的文件若存在则先清空,然后重新创建。‘a’模式打开的文件是为追加数据准备的,所有写入数据追加至文件末尾。若文件不存在,则自动创建。
  
    buffering用于指示文件采用的缓冲方式。0表示不缓冲,1表示只缓冲一行数据。

2.输入
read()用来读取字节到字符串中,最多读取给定数目个字节。

readline()读取打开文件的一行(读取下个行结束符之前的所有字节),然后整行(包括行结束符)作为一个人字符串返回。

readlines()读取所有行,然后把它们作为一个字符串列表返回。

3.输出
write() 把含有文本数据或二进制数据块的字符串写到文件中去。

writelines() 和readlines一样,是针对列表的操作,接受一个字符串列表作为参数,将它们写入文件。行结束符并不会自动加入,必须在调用writelines()之前,给每行结尾加上行结束符。

4.文件内移动
seek(off,whence) 可以在文件中移动文件指针到不同的位置。从whence(0:文件起始,1:当前位置,2:文件末尾)开始偏移off字节。

text()告诉你当前文件指针在文件中的位置。

5.文件迭代
for eachline in f:    //一行 一行访问文件(文件迭代比readlines()更高效)

6.其他
close() 关闭文件,结束访问

fileno()  返回打开文件的描述符。

flush() 直接把内部缓冲区的数据写入文件。

truncate(size) 截取文件到最大size字节,默认为当前位置。

7.os模块
可以仔细看一下书上的例子,里面的各个方法都在书上的表里。



习题
9.1文件过滤。显示一个文件的所有行,忽略以#号开头的行
fobj=open('test_9_1.txt','r')
for eachline in fobj:
    if eachline[0]=='#':
        continue
    else:
        print eachline,
附加题只需再加一个for循环遍历每一行即可。

9.2文件访问,提示输入数字N和文件F,然后显示文件的前N行。
N=int(raw_input('enter the number N:'))
filename=raw_input('enter the filename:')

fobj=open(filename,'r')
for i in range(N):
    print fobj.readline(),
    
9.3文件信息。提示输入一个文件名,然后显示总行数。
filename=raw_input('enter a file name:')
fobj=open(filename,'r')
List=fobj.readlines()
print 'the rows of this file is:',len(List)

9.4文件访问,写一个逐页显示文本文件的程序,提示输入文件名,每次显示25行,暂停并向用户提示按任意键继续
filename=raw_input('输入文件名:')
i=0
fobj=open(filename,'r')
for eachline in fobj:
     print eachline,
     i+=1
     if(i==24):
         stop=raw_input('按任意键继续')
         i=0
         

9.6 文件比较,写一个比较两个文件的程序,若果不同,给出第一个不同处的行号和列号。
(这里有个问题,题目应该默认两个文本行数和每行长度都会一样的吧,所以我就这么写了。)  
fobj1=open('9_6_1.txt','r')
fobj2=open('9_6_2.txt','r')

List1=fobj1.readlines()
List2=fobj2.readlines()
result=[]
for i in range(len(List1)):
    for j in range(len(List1[i])):
        if List1[i][j]!=List2[i][j]:
            print '第一个不同处位于第',i+1,'行第',j+1,'列'
            break
9.7解析文件。协议额解析特定结构的系统配置文件的程序。
不太明白题目的意思,不过搜了一下程序,并不难。
def parseIni(filename):
    f=open(filename,'r')
    dict1={}
    for eachLine in f:
        index=eachLine.find('=');
        if index!=-1:
            key=eachLine[:index].strip()
            value=eachLine[index+1:].strip()
            dict1[key]=value
    for key in dict1:
        print key,'=',dict1[key]
    f.close()

parseIni('desktop.ini')

9.8模块研究。提取模块的属性资料。
先介绍两个函数
(1)str() 

你可以使用内建的dir函数来列出模块定义的标识符。标识符有函数、类和变量。

当你为dir()提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。

(2) getattr(object,name,default):

作用:返回object的名称为name的属性的属性值,如果属性name存在,则直接返回其属性值;如果属性name不存在,则触发AttribetError异常或当可选参数default定义时返回default值。

name = raw_input('module name: ')
obj = __import__(name)
List=dir(obj)
for item in List:
    print 'name:',item,
    print 'type:',type(item),
    print 'value',getattr(obj,item)
    

9.9 Python文档字符串。进入Python标准库所在的目录....(题目越来越难啊.....)
import os
bpath=r'c:\python27\lib'#r表示保持字符串原始意思,不对其进行转义。
files=os.listdir(bpath)
List1=[]
List2=[]
i=0
for eachfile in files:
     if os.path.splitext(eachfile)[1]=='.py':
        mpath=os.path.join(bpath,eachfile)
        filename=open(mpath,'r')
        sign='_doc_'
        for eachline in filename:
            if eachline.find(sign)!=-1:
                List1.append(os.path.basename(mpath))
                break
        if i==len(List1):
            List2.append(os.path.basename(mpath))
        i=len(List1)

print '含有‘_doc_’字符串的.py文件有:'
for i in List1:
    print i
print '不含‘_doc_’字符串的.py文件有:'
for j in List2:
    print j




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值