文件操作:长期保存数据以便重复使用、修改和共享,必须将数据以文件的形式存储到外部存储介质或云盘中。按文件中数据的组织形式可以把文件分文本文件和二进制文本。
1.文本文件
文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符"\n"结尾。常规字符串是指记事本或其他文本编辑器能正常显示,编辑并且能够直接阅读和理解的字符串,如英文、汉字、数字字符串。
2.二进制文件
二进制文件把对象内容以字节串(bytes)进行存储,无法用记事本或其他普通文本处理软件直接编辑,通常需要专门的软件才能显示、修改编辑或执行。常见的图形文件、音频文件、可执行文件、资源文件、各种数据库文件等属于二进制文件。
python内置了文件对象,通过open()函数即可以指定的模式打开指定文件或创建文件对象,格式如下:
文件对象名=open (文件名,[打开方式,缓冲区])
文件打开模式 文件对象属性
模式 | 说明 | 属性 |
|
r | 读模式 | closed | 判断文件是否关闭,若文件关闭,则返回True |
w | 写模式 | mode | 返回文件的打开模式 |
a | 追加模式 | name | 返回文件的名称 |
b | 二进制模式(可与其他模式组合使用) |
|
|
+ | 读写模式(可与其他模式组合使用) |
|
|
文件对象常用方法:
方法 | 功能说明 |
read([size]) | 从文件中读取size个字节 |
readline() | 从文本文件中读取一行内容作为结果返回 |
readlines() | 从文本文件中的每行文本作为一个字符串存入列表中,返回该列表 |
seek(offset[,whence]) | 把文件指针移动到新的位置,offset表示相对于whence的位置 |
tell() | 返回文件指针的当前位置 |
write(s) | 把字符串s的内容写入文件 |
writelns() | 把字符串列表写入文本文件,不添加换行符 |
实例
1、读取文件、写入文件
with codecs.open(‘filename.txt’,’r’) as f:
f.write(s)
2、随机生成数据格式如,(‘编号’,整数)写入文件、读取该文件并按整数排序,
import codecs
import random
withcodecs.open('2016.txt','w') as f:
s=""
for i in range(100):
s+="编号,"+str(random.randint(1,1000))+"\n" #生成指定格式数据
f.write(s) #数据写入文件
withcodecs.open('2016.txt','r') as f:
data=f.readlines() #将文本文件的每行文本作为一个字符串存入列表中,
datamc=[eval(line.strip('\n').split(',')[1])for line in data ] #将整数部分取出来
print(datamc)
print('排序后结果')
datamc.sort(key=lambdax:x) #排序
print(datamc)
3 随机生成数据格式如,(‘编号’,整数)写入文件、读取该文件并按整数排序:
#每次一行一行读取数据
l=[]
with codecs.open('2016.txt','r') as f:
while True:
line=f.readline()
if line=='':
break
#print(line.strip('\n'),end=',')
t=[]
t.append(line.strip('\n').split(',')[0])
t.append(eval(line.strip('\n').split(',')[1]))
l.append(t)
print(l)
print('排序后数据')
l.sort(key=lambda x:x[1])
print(l)
用python习惯 做代码优化如下:
data=[]
with open('2016.txt','r') as f: #打开文件
for line in f: #文件对象是可迭代对象
b,i=line.strip('\n').split(',') #对文件对象中两部分内容分别赋值给临时变量
data.append([b,eval(i)]) #将内容添加到list中
print(data) #输出原始数据
print('排序后数据:')
data.sort() #排序
print(data) #输出排序后数据