首页 > 代码库 > Python基础(8)--文件

Python基础(8)--文件

文件可以通过调用open或file来打开,open通常比file更通用,因为file几乎都是为面向对象程序设计量身打造

本文地址:http://www.cnblogs.com/archimedes/p/python-file.html,转载请注明源地址。

打开文件

打开文件程序会调用内置的open函数,首先是外部名,接着就是处理模式。

常见的文件运算:

在任何情况下,Python程序中的文本文件采用字符串的形式,读取文本时会返回字符串形式的文本

从文件中读取的数据回到脚本时是一个字符串,所以如果字符串不是你所需的,就得将其转换成其他类型的Python对象

实际应用中的文件

首先看一个文件处理的一个简单的例子:

>>> myfile=open(myfile,w)
>>> myfile.write(hello,myfile!\n)
>>> myfile.close()
>>> myfile=open(myfile)
>>> myfile.readline()
hello,myfile!\n
>>> myfile.readline()
‘‘

把一行文本写成字符串,包含行终止符\n,写入方法不会为我们添加行终止符

在文件中存储并解析Python对象

必须使用转换工具把对象转换成字符串,注意文件数据在脚本中一定是字符串,而写入方法不会自动地替我们做任何向字符串格式转换的工作

>>> X,Y,Z=43,324,34
>>> S=Spam
>>> D={a:1,b:2}
>>> L=[1,2,3]
>>> F=open(datafile.txt,w)
>>> F.write(S+\n)
>>> F.write(%s,%s,%s\n%(X,Y,Z))
>>> F.write(str(L)+$+str(D)+\n)
>>> F.close()

一旦我们创建了文件爱你就可以通过打开和读取字符串来查看文件的内容,而print语句则会解释内嵌行终止符来给用户满意的结果:

>>> bytes=open(datafile.txt).read()
>>> bytes
"Spam\n43,324,34\n[1, 2, 3]${‘a‘: 1, ‘b‘: 2}\n"
>>> print bytes
Spam
43,324,34
[1, 2, 3]${a: 1, b: 2}

鉴于Python不会自动把字符串转换为数字或其他类型的对象,需要使用诸如索引、加法等普通对象工具

>>> F=open(datafile.txt)
>>> line=F.readline()
>>> line
Spam\n
>>> line=F.readline()
>>> line
43,324,34\n
>>> parts=line.split(,)
>>> parts
[43, 324, 34\n]
>>> int(parts[1])
324
>>> numbers=[int(p) for p in parts]
>>> numbers
[43, 324, 34]
>>> line=F.readline()
>>> line
"[1, 2, 3]${‘a‘: 1, ‘b‘: 2}\n"
>>> parts=line.split($)
>>> parts
[[1, 2, 3], "{‘a‘: 1, ‘b‘: 2}\n"]
>>> eval(parts[0])
[1, 2, 3]
>>> objects=[eval(p) for p in parts]
>>> objects
[[1, 2, 3], {a: 1, b: 2}]

用pickle存储Python的原生对象

使用eval可以把字符串转换成对象,pickle模块是能够让我们直接在文件中存储几乎任何Python对象的高级工具,并不要求把字符串转换来转换去

>>> F=open(datafile.txt,w)
>>> import pickle
>>> pickle.dump(D,F)
>>> F.close()
>>> F=open(datafile.txt)
>>> E=pickle.load(F)
>>> E
{a: 1, b: 2}

pickle模块执行所谓的对象序列化,也就是对象和字节字符串之间的互相转换