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

代码Python入门(七、文件)

2017-05-14 20:45 323 查看
常见文件运算:
output = open('/tmp/spam','w')                  创建输出文件('w'是指写入)
input = open('data','r')                        创建输入文件('r'是指读写)
input = open('data')                            'r'是默认值
aString = input.read()                          把整个文件读进单一字符串
aString = input.read(N)                         读取之后的N个字节(一或多个)到一个字符串
aString = input.readline()                      读取下一行(包括行末标识符)到一个字符串
aList = input.readlines()                       读取整个文件到字符串列表
output.write(aString)                           写入字节字符串到文件
output.writelines(aList)                        把列表内所有字符串写入文件
output.close()                                  手动关闭(当文件收集完成时会替你关闭文件)
output.flush()                                  把输出缓冲区刷到硬盘中,但不关闭文件
anyFile.seek(N)                                 修改文件位置到偏移量N处以便进行下一个操作


在任何情况下,Python程序中的文本文件采用字符串的形式。读取文件时会返回字符串形式的文本,文本作为字符串传递给write方法。

与print语句不同的是,当你把数据写入文件时,Python不会自动把对象转换为字符串——你必须传递一个已经格式化的字符串。
因此,我们之前见过的处理文件时可以来回转换字符串和数字的工具迟早会派上用场(例如,int、float、str以及字符串格式表达式)。

Python也包括一些高级标准库工具,用来处理一般对象的存储(例如,pickle模块)以及处理文件中打包的二进制数据(例如,struct模块)。

在Python中,一旦对象不再被引用,则这个对象的内存空间就会自动被收回。当文件对象被收回的时候,如果需要,Python也会自动关闭该文件。
这就意味着你不需要总是手动去关闭文件,尤其是对于不会运行很长时间的简单脚本。

但是    ,文件的这个收集完成后自动关闭的特性不是语言定义的一部分。因此,手动进行文件close方法调用是我们需要养成的一个好习惯。

首先新建一个文本文件,(open()方法打开命名文件,若该文件不存在在创建该命名文件)



#!/usr/bin/env python
# -*- coding: UTF-8 -*-
myfile = open('myfile.txt', 'w')
myfile.write('hello text file\n')
myfile.close()

(自动创建文件)
myfile = open('file', 'w')  # 打开文件(若该文件不存在则创建)
myfile.write('hello text file\n')
myfile.close()


在文件中写入  : hello text file




myfile = open('myfile.txt')  # 'r'是默认值
print "'", myfile.readline(), "'"
print "'", myfile.readline(), "'"


这个例子把文本写成字符串,包括行终止符\n。写入方法不会为我们添加行终止符,所以程序必须包含它来严格地终止行
(否则,下次写入时会简单地延长文件的当前行)

X, Y, Z = 43, 44, 45
S = 'Spam'
D = {'a': 1, 'b': 2}
L = [1, 2, 3]
F = open('myfile.txt', 'w')
F.write(S + '\n')
F.write('%s, %s, %s\n' % (X, Y, Z))  # '%s, %s, %s\n' % (X, Y, Z)字符串格式化,
# 基于字典的字符串格式化:"%(n)d %(x)s" % {"n":1, "x": "spam"}
F.write(str(L) + '$' + str(D) + '\n')
F.close()
bytes = open('myfile.txt').read()
print bytes

F = open('myfile.txt')
line = F.readline()
print "'", line, "'"
print line.rstrip()  # rstrip方法去掉多余的行终止符,不改变line
print "'", line, "'"

line = F.readline()
print line
parts = line.split(',')  # 使用字符串split方法,从逗号分隔符的地方将整行隔开,得到行有个别数字的子字符串列表
print parts

print int(parts[1])  # 转换为整数
numbers = [int(P) for P in parts]  # 列表解析,通过for循环,将列表中每一项执行 int(P)语句(转换为整数)
print numbers

line = F.readline()
print line
parts = line.split('$')
print parts
print eval(parts[0])  # eval是一个内置函数,能够把字符串当做可执行代码(技术上讲,就是一个含有Python表达式的字符串)
objects = [eval(X) for X in parts]  # 列表解析
print objects


**用pickle储存Python的原生对象
pickle模块是能够让我们直接在文件中存储几乎任何Python对象的高级工具,也并不要求我们把字符串转换来转换去。就像是超级通用的数据格式化和解析工具。
例如,在文件中储存字典
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import pickle

D = {'a': 1, 'b': 2}
F = open('myfile.txt', 'w')
pickle.dump(D, F)   # pickle any object to file 将对象写入文件中
F.close()
# 取回对象
F = open('myfile.txt')
E = pickle.load(F)  # Load any object from file 对象重建
print E
'''
取回等价的字典对象,没有手动断开或转换的要求。pickle模块执行所谓对象序列化(object serialization),
也就是对象和字符串之间的相互转换。但我们要做的工作却很少。事实上,pickle内部将字典转成字符串形式
'''
print "实际写入内容"
print open('myfile.txt').read()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python