您的位置:首页 > 编程语言 > Python开发

Python学习笔记---模块;文件与文本处理

2010-04-09 19:49 946 查看
1.Python中时间函数有几种不同的表示方法。一种是基于数字的表示方法,另外一种是用一系列值来表示,第三种是用ASCII码字符串的可读形式来表示的元组。
time()函数返回的是从某一时间点算起的秒数,该数值是一个浮点数。根据操作系统的不同,这个时间点也不同。通过求localtime(0)的值可以找到系统的该时间点。
localtime(t)返回一个具有9个元素的元组。
ctime(t)返回一个表示时间值的ASCII码的字符串,t作为浮点型数值传递给函数。
>>> import time
>>> print time.ctime(0)
Thu Jan 01 08:00:00 1970
>>> print time.localtime(0)
(1970, 1, 1, 8, 0, 0, 3, 1, 0)
>>>
2.Python中只允许通过值来传递变量,但在其他语言中,允许通过引用来传递变量。在这种情况下,可以在函数内部改变参数值。而且改变将对调用程序产生影响。
3.处理二进制文件:二进制文件中,字符不是用可识别的行结束符按行来组织的。这样,对二进制文件进行处理的方式,跟对文本文件进行处理的方式有所不同。首先,如果要对二进制文件进行操作的话,必须在open函数中的打开模式参数中附加一个字母"b”来加以指定。
>>> b_out=open("D://outbin.dat","wb")
若要写入二进制数据,需要用struct模块包装数据,可参考python库中有关struct的所有可能的操作。
>>> b_out.write(struct.pack('4i',1,2,3,4))
>>> b_out.close()
读二进制文件时需要指定读出数据的数量,可以在read()方法中使用可选择的长度变量来指定。
>>> b=open("D://outbin.dat","rb")
>>> bytes=b.read(4)
在打印这些字节之前,需将它们转换成可打印的形式。ord()函数可以执行该项执行:
>>> for c in bytes:print ord(c)
1
0
0
0
问题:为什么输出的不是1 2 3 4?
4.如果要在Python中创建一个COPY命令,可以以写模式另外打开一个文件,然后将原文件内容逐行写入新打开的文件中,而不是将文件内容打印出来。
#创建与copy menu.txt  menu.bak等效的命令
#分别以读模式和写模式打开文件
inp=open(“D://menu.txt”,"r”)
outp=open(“menu.bak”,"w”)
#逐行读文件直到结束
#将每行拷贝到输出文件
line=inp.readline()
while line:
    outp.write(line)
    line=inp.readline()
print “1 file copied”
#关闭文件
inp.close()
outp.close()
5.修改一个已经存在的文件有两种方法。第一种,可以把已经存在的文件读入内存(假定有足够的空间),关闭输入文件,处理数据,然后以写模式重新打开该文件,将数据写入文件,覆盖掉原先的内容。另一种方法,可以先创建一个新的输出文件,将结果写入输出文件,使用OS模块删除原文件,以原文件名对新文件重新命名。第二种方法相对较复杂,但是在文件很大而无法调入内存时只能选择这种方法。在程序执行过程中,即使计算机或者程序出现错误,第二种方法也是相对安全的,第一种方法可能导致原文件丢失,而第二种方法可保证数据的安全。
import os,time
try:
    menu=open("D://menu.txt","r")
    outf=open("D://menu.tmp","w")
    header="menu for %s" %time.ctime(time.time())
    outf.write(header+"/n")
    lines=menu.readlines()
    for i in range(2,len(lines)):
        outf.write(lines[i])
    outf.close()
    menu.close()
    os.rename("D://menu.txt","D://menu.bak")
    os.rename("D://menu.tmp","D://menu.txt")
    os.remove("D://menu.bak")
except:
    print "ERROR:Failed to create new menu"
6.怎样在一个已经存在的文件尾部添加数据?一种方法是打开输入文件,将数据读入一个列表,将数据添加到列表中,然后将整个列表写到原文件的一个新的版本中。如果文件比较小,该方法不会有什么问题,但是如果文件非常大(可能在超过100MB时),则可能会超过内存允许的最大范围。还好,我们可以通过open()函数的另一种打开模式("a”),用写操作直接将数据添加到已经存在的文件中去。而且更好的一点是,如果文件不存在,这种模式可以像“w”模式一样打开一个新文件。
7.单词计数:
import string
def numwords(s):
    list=string.split(s)
    return len(list)
inp=open("D://menus.txt","r")
total=0
for line in inp.readlines():
    total=total+numwords(line)
print "File had %d words"%total
inp.close()
首先为一行中的单词创建一个列表,用split()函数将字符串通过whitespace(或者用其他自定义的字符)分割为字段,最后用内置函数len()返回表中元素的个数,在该例中将返回字符串中单词的数目。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: