5.Python编程之代码复用
2018-02-27 13:04
141 查看
文件的基础
文件
存储在外部介质的数据或信息的集合 程序中的源程序 数据中保存着的数据 图像中的像素数据 ...... 有序的数据系列
编码
信息从一种形式转换为另一种形式的过程 ASCLL码 Unicode UTF-8 ...
常用编码
Unicode 跨语言,跨平台进行文本转换和处理 对每种语言中字符设定统一且唯一的二进制编码 每个字符两个字节长度 65536个字符的编码空间 “严”:Unicode的十六进制数为4E25 UTF-8编码 可变长度的Unicode的实现方式 '严':十六进制数为E4B8A5
Unicode与UTF-8编码字节范围对应关系
Unicode符号范围(十六进制) | UTF-8编码方式(二进制) |
---|---|
0000 0000-0000 007F | 0XXXXXXX |
0000 0080-0000 07FF | 110XXXXX 10XXXXXX |
0000 0800-0000 FFFF | 1110XXXX 10XXXXXX 10XXXXXX |
0001 0000-0010 FFFF | 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX |
双字节编码
举例
文件数据
文本文件 以ASCLL码方式存储的文件 二进制文件
多行文本
\n表示换行 举例: Hello world Goodbye 32 Hello \nWorld \n \n Goodbye 32 \n 存储在文件中,得到字符系列: 二进制文件ASCLL码 照片,音乐,视频,计算机程序 优点: 更加节省空间 采用二进制无格式存储 表示更为精确 注意: 文本文件时基于字符定长的ASCLL: 二进制文件编码是变长的,灵活利用率要高 不同的二进制文件编码方式是不同的
文件的基本处理
打开文件 建立磁盘上的文件与程序中的对象相关联 通过相关的文件对象获得 文件操作 读取 写入 定位 其他:追加,计算等 关闭文件 切断文件与程序的联系 写入磁盘,并释放文件缓冲区 打开文件代码实现 Open() <variable> = open(<name>,<mode>) <name> 磁盘文件名 <mode> 打开模式
打开模式
模式 | 解释 |
---|---|
r | 只读,如果文件不存在,则输出错误 |
w | 为只写(如果文件不存在,则自动创建文件) |
a | 表示附加到文件末尾 |
rb | 只读二进制文件。如果文件不存在,则输出错误 |
wb | 只写二进制文件,如果文件不存在,则自动创建文件 |
ab | 附加到二进制文件末尾 |
r+ | 读写 |
举例
打开一个名为“numbers.dat”的文本文件 >>> infile = open("numbers.dat","r") 打开一个名为“music.mp3” 的音频文件 >>> infile = open("muxic.mp3","rb")
文件读取
read() 返回值为包含整数个文件内容的一个字符串 readline() 返回值为文件下一行内容的字符串 readlines() 返回值为整数个文件内容的列表,每项是以换行符为结尾的一行字符串 示例:将文件内容输出到屏幕上 def main(): fname = eval(input("Enter filename: ") infile = open(fname,"r") data = infile.read() print(data) main() 举例: 输出文件前5行的内容 infile = open(someFile,"r") for i in range(5): line = infile.readline() print(line[:-1])
写入文件
从计算机内存向文件写入数据 write() : 把含有本文数据或二进制数据块的字符串写入文件中。 writelines() : 针对列表操作,接受一个字符串列表作为参数,将它们写入文件。 举例:写入操作 outfile = open("outfile.text","w") outfile.writelines(["Hello", " ", "world"]) outfile.close() infile = open("outfile.text","r") infile.read()
文件遍历
最常见的文件处理方法 举例 拷贝文件 根据数据文件定义行走路径 将文件有一种编码转换为另外一种编码
遍历文件模板
通用代码框架 file = open(somefile, "r") for line in file.readlines(): #处理一行文件内容 file.close() 简化代码框架: file = open(someFile, "r") For line in file: #处理一行文件内容 file.close()
举例:文件拷贝
def main(): #用户输入文件 f1 = input("Enter a souce file:").strip() f2 = input("Enter a souce file:").strip() #打开文件 infile = open(f1, "r") outfile = open(f2,"w") #拷贝文件数据 countLines = countChars = 0 for line in infile: countLines +=1 countChars += len(line) outfile.write(line) print(countLines, "lines and",countChars,"chars copied") infile.close() outfile.close() main()
文件实例1
编写程序根据文件data.txt中的数据,使用turtle库绘制图形路径。import turtle from turtle import * # 设置窗口信息 turtle.title("数据驱动的动态路径绘制") turtle.setup(800,800,0,0) #设置画笔 pen = turtle.Turtle() pen.color("red") pen.width(5) pen.shape("turtle") pen.speed(2) # 读取数据文件到列表result中 result = [] file = open("data.txt","r") for line in file: result.append(list(map(float,line.split(",")))) print(result) #根据每一条数据记录进行绘制 for i in range(len(result)): pen.color((result[i][3],result[i][4],result[i][5])) pen.fd(result[i][0]) if result[i][1]: pen.rt(result[i][2]) else: pen.lt(result[i][2]) done()
文件实例二
多文件读写例子 编写程序将电话簿TeleAddressBook.txt和电子邮件EmailAddressBook.txt合并为一个完整的AddressBook.txt 打开文件,读取文件: 代码如下: ftele1 = open("EmailAddressBook.txt","rb") ftele2 = open("TeleAddressBook.txt","rb") ftele1.readline() #跳过第一行 ftele2.readline() lines1 = ftele1.readlines() lines2 = ftele2.readlines() 建立空列表用于存储姓名,电话,Email: list1_name = [] list1_tele = [] list2_name = [] list2_email = [] 获取TeleAddressBook中的信息 for line in lines1:#获取第一个文本中的姓名和电话信息 elements = line.split() list1_name.append(str(elements[0].decode('gbk'))) list1_tele.append(str(elements[1].decode('gbk'))) 获取EmailAddressBook中的信息 for line in lines2:#获取第二个文本中的姓名和邮件信息 elements = line.split() list2_name.append(str(elements[0].decode('gbk'))) list2_email.append(str(elements[1].decode('gbk'))) 开始合并处理 生成新的数据 lines = [] lines.append('姓名\t 电话 \t 邮件\n') 按索引方式遍历姓名列表1 处理姓名列表2中剩余的姓名 按索引方式遍历姓名列表1: for i in range(len(list1_name)): s = '' if list1_name[i] in list2_name: j = list2_name.index(list1_name[i])# 找到姓名列表1对应列表2中的姓名索引位置 s = '\t'.join([list1_name[i], list1_tele[i], list2_email[j]]) s += '\n' else: s = '\t'.join([list1_name[i], list1_tele[i], str(' ------ ') s +='\n' lines.append(s) 处理姓名列表2中剩余的姓名 for i in range(len(list2_name)) s = '' if list2_name[i] not in list1_name: s = '\t'.join([list2_name[i], str(' ----- '), list2_email[i]]) s += '\n' lines.append(s) 将新生成的合并数据写入新的文件中 ftele3 = open('AddressBook.txt','w') ftele3.writelines(lines) 关闭文件 ftele3.close() ftele1.close() ftele2.close() print("The addressBooks are merged!")
相关文章推荐
- Python编程遵循的PEP8代码规范
- python代码(2)---google中国编程挑战赛入围赛真题HardDuplicateRemover(1000分)
- python多线程在socket编程中的应用(代码范例)
- python编程之执行带有局部副作用的代码
- Qt多线程编程示例--代码基于python
- Python编程使用tkinter模块实现计算器软件完整代码示例
- [代码笔记] python 之socket编程(二)
- Python黑帽子--黑客与渗透测试编程之道 python3 实现代码
- 在Linux中#!/usr/bin/python之后把后面的代码当成程序来执行。 但是在windows中用IDLE编程的话#后面的都是注释,之后的代码都被当成文本了。 该怎么样才能解决这个问题呢?
- Python实现端口复用实例代码
- Python2.X与Python3.X编程代码笔记(1):AttributeError: 'dict' object has no attribute 'iteritems'
- C#之对接口编程,代码复用
- python编程练习---一行代码实现计算器功能
- 看代码学编程之python3函数
- Python趣味代码整合之提升学生编程兴趣
- 华为笔试机考编程题 购物单 解题方案及python代码实现
- 资源 | 想用Python学机器学习?Google大神替你写好了所有的编程示范代码
- python入门-----有编程基础,直接写代码
- 不懂编程金融狗的葵花宝典02(python/K近邻法/机器学习入门简单详细代码)
- python网络编程--IO多路复用之epoll