Python全栈工程师(文件操作、编码)
Python人工智能从入门到精通
最近简直要死了 发烧感冒 喉咙痛。。。。、
如何长期保存计算机中数据:
需要文件操作
文件 file:
文件是用于数据存储的单位
文件通常用来长期储存数据
文件中的数据是以字节为单位进行顺序储存的
文件的操作流程:
1.打开文件
2.读/写文件
3.关闭文件
注:
任何操作系统, 一个应用程序同时打开文件的数量有最大数限制
文件打开函数:
open(file, mode=‘rt’) 用于打开一个文件, 返回此文件流对象,
如果打开文件失败, 则会触发osError错误
文件的关闭方法:
F.colse() #关闭问津, 释放系统资源
示例:
# 此示例示意文件的打开和关闭操作
try:
f = open('./aaa.txt') # 不存在此文件
# f = open('./myfile.txt') # 不存在此文件
print("打开文件成功") # 此处要进行读/写操作 f.close() # 半闭文件
except OSError:
print("文件打开失败")
文件方法:
文件
mode 模式字符的含义
字符 | 含义 |
---|---|
'r' | 以只读方式打开(默认) |
'w' | 以只写方式打开,删除原有文件内容(如果文件不存在,则创建该文件并以只写方式打开) |
'x' | 创建一个新文件, 并以写模式打开这个文件,如果文件存在则会产生"FileExistsError"错误 |
'a' | 以只写文件打开一个文件,如果有原文件则追加到文件末尾 |
'b' | 用二进制模式打开 |
't' | 文本文件模式打开 (默认) |
'+' | 为更新内容打开一个磁盘文件 (可读可写) |
- 缺省模式是 'rt'
- 'w+b' 可以实现二进制随机读写,当打开文件时,文件内容将被清零
- 'r+b' 以二进制读和更新模式打开文件,打开文件时不会清空文件内容
- 'r+' 以文本模式读和更新模式打开文件,打开文件时不会清空文件内容
python 文件常用方法:
方法 | 说明 |
---|---|
F.close() | 关闭文件(关闭后文件不能再读写会发生ValueError错误) |
F.readline() | 读取一行数据, 如果到达文件尾则返回空行 |
F.readlines(max_chars=-1) | 返回每行字符串的列表,max_chars为最大字符(或字节)数 |
F.writelines(lines) | 将字符串的列表或字符串的列表中的内容写入文件 |
二进制文件操作方法 | |
F.read(size=-1) | 从一个文件流中最多读取size个字符(文本文件)或字节(二进制文件),如果不给出参数,则默认读取文件中全部的内容并返回 |
F.write(text) | 写一个字符串到文件流中,返回写入的字符数(文本文件)或字节数(二进制文件) |
F.tell() | 返回当前文件流读写指针的绝对位置(字节为单位) |
F.seek(offset, whence=0) | 改变数据流读写指针的位置,返回新的绝对位置 |
F.flush() | 把写入文件对象的缓存内容写入到磁盘 |
F.readable() | 判断这个文件是否可读,可读返回True,否则返回False |
F.writable() | 判断这个文件是否可写,可写返回True,否则返回False |
F.seekable() | 返回这个文件对象是否支持随机定位 |
F.truncate(pos = None) | 剪掉 自pos位置之后的数据,返回新的文件长度 |
文本文件操作:
操作模式:
‘t’
说明:
1.默认文件中储存的都为字节数据, 在读写过程中会自动进行编解码操作
2.文本文件以行位单位进行分割, 在python内部统一用"\n"做为换行符进行分割
3.对文本文件的读写操作需要用字符串(str)进行数据操作
Linux换行符: '\n'
Windows 换行符: '\r\n'
新的Mac OS 换行符: '\n'
旧的Macintosh换行符: '\r'(已不用了)
文件流对象是可迭代对象, 迭代过程中将换行符“\n”作为分隔符
f = open('phonenumber.txt')
for line in f:
print(line) # 打印每一行的数据
标准输入输出文件:
sys.stdin 标准输入文件
Ctrl + D 输入文件结束符
sys.stdout 标准输出文件
sys.stderr 标准错误输出文件
标准文件绝对不能关闭
Linux系统内所有的硬件都会映射成文件 关闭文件会导致错误
模块:sys
注:
标准文件不需要打开和关闭就可以使用
示例:
import sys sys.stdout.write("我是标准输出\n")
sys.stderr.write("我是一个错误\n") import sys s = sys.stdin.read()
print("s=", s) print("程序结束")
二进制文件操作:
二进制文件操作模式字符:‘b’
默认文件中存储的是以字节数据为单位, 通常有人为规定的格式
二进制文件操作需要用字节串进行读写
F.read()/F.readline() F.readlines()返回类型
对于文本操作
F.write() 对于二进制文件也需要用字节串进行操作
F.tell:
作用:
返回当前的读写位置(从文件头以字节为单位)
F.seek方法:
F.seek(偏移量,whence=相对位置)
偏移量
大于0的数代表向文件尾方向移动的字节数
小于0的数代表向文件头方向移动的字节数
相对位置
0代表从文件头开始偏移
1代表从文件当前位置开始偏移
2代表从文件尾开始偏移 (第一个参数必须是负的)
示例:
# 此示例示意用seek改变文件的读写位置,用tell来得到读写位置 f = open('myseek.txt', 'rb')
b = f.read(2) # b'AB' 读取出来
print(b) # b'AB # 从头开始向后走5个字节
# f.seek(5, 0) # 从当前位置向后走3个字节
# f.seek(3, 1) # 从文件尾向前数15个字节
f.seek(-15, 2) b = f.read(5)
print(b) # b'abcde' f.close()
汉字编码(只讲两种)
国标系列:
GB18030(二字节或四字节编码27553个字)
GBk(二字节编码21003个字)
GB2312(二字节编码6763个字)
(Windows 常用)
国际标准: Unicode <---> UTF-8 (Ascii 占1字节 汉字占3字节)
(Linux Mac OS X / IOS /Android)
python编码字符串:
‘gb18030’
‘gb2312’
‘gbk’
‘utf-8’
‘ascii’
....
以上字符串用于encide和decode中
编码注释:
在Python源文件中的第一行或第二行写入如下内容:
# -*- codeing:gbk -*-
#设置源文件编码格式为gbk
或
# -*- codeing:utf-8 -*-
#设置源文件编码格式为utf-8
作用:
告诉解释执行器此文件的编码是什么
练习:
自己写一个文件 'info.txt' 内部存一些文字信息
如:
张三 20 100
李四 21 96
小王 22 98
写程序将这些数据读取出来,打印到终端上
答案:
try:
f = open("myfile.txt")
L = f.readlines()
for x in L:
s = x.strip()
n, a, s = s.split()
print("姓名:", n, "年龄:", int(a), "成绩:", int(s))
except:
print("打开文件是失败")
练习:
1. 写程序,循环输入很多个人的姓名,电话号码,
当输入结束后将这些信息存入到文件phonenumber.txt中
(建议先用列表暂存数据,格式自己定义)
2. 写程序,将phonenumber.txt文件中的数据读取出来.
再用以下格式打印出来:
如:
小张 的电话是 13888888888
小李 的电话是 13999999999
练习:
1. 写程序实现复制文件的功能
要求:
1. 要考虑特大文件问题
2. 要关闭文件
3. 要能复制二进制文件
如:
请输入源文件路径名: /home/tarena/xxx.tar.gz
请输入目标文件路径名: ./a.tar.gz
显示:
文件已成功复制
答案:
def copy_myfile():
try:
ypath = input("please inout raw path:")
xpath = input("please inout new path:")
f1 = open(xpath, "w+b")
f = open(ypath, "r+b")
for x in f:
f1.write(x)
f1.close()
f.close()
print("File copied")
except:
print("file not inexeistence") copy_myfile()
2. 修改学生信息管理程序,要求加入两个功能:
9) 保存信息到文件(si.txt)
L = [{"name": "Tom", "age": 20, "score": 98},
{"name": "Lin", "age": 21, "score": 99},
{"name": "Garin", "age": 19, "score": 100}] def student_file(L):
try:
f = open("./si.txt", "x")
for x in L:
f.write(x["name"])
f.write(" ")
f.write(str(x["age"]))
f.write(" ")
f.write(str(x["score"]))
f.write("\n")
except FileExistsError:
f = open("./si.txt", "a")
for x in L:
f.write(x["name"])
f.write(" ")
f.write(str(x["age"]))
f.write(" ")
f.write(str(x["score"]))
f.write("\n") student_file(L)
10) 从文件中读取数据(si.tx
def open_student_file():
f = open("./si.txt")
L = []
for line in f.readlines():
s = line.strip()
n, a, s = s.split() # 拆成列表
student = {"name": n, "age": a, "score": s}
L.append(student)
f.close()
return L
源码: https://pan.baidu.com/s/1vVuH7OwNdn8vqaBKAivniQ
异常还没处理...........
Python全栈工程师(文件操作、编码)的更多相关文章
- python全栈开发-Day7 字符编码总结
python全栈开发-Day7 字符编码总结 一.字符编码总结 1.什么是字符编码 人类的字符--------->翻译--------->数字 翻译的过程遵循的标准即字符编码(就是一个字符 ...
- Python全栈工程师(装饰器、模块)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 全栈工程师 Python人工智能从入门到精通 装饰器 decorators(专业提高篇) 装饰 ...
- Python全栈工程师(递归函数、闭包)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 全栈工程师 Python人工智能从入门到精通 函数式编程: 是指用一系列函数解决问题 每一个函数完成细 ...
- Python全栈工程师系列学习之学习记录
@ 目录 前言 Day 01 一.python的历史和种类 二.安装python解释器以及配置环境变量 三.变量.常量和注释 Day 02 Day 03 Day 04 Day 05 Day 06 一. ...
- 【目录】python全栈工程师
第一阶段:Python 语言核心编程1. Python核心 -- 2048 游戏核心算法2. 面向对象 -- 天龙八部游戏技能系统3. Python高级 -- 集成操作框架项目:2048游 ...
- python全栈开发-Day6 字符编码
python全栈开发-Day6 字符编码 一 .了解字符编码的知识储备 一 .计算机基础知识 二 .文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启 ...
- Python全栈工程师(面向对象)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 Python人工智能从入门到精通 day16补充: 异常处理 文件 ...
- Python全栈工程师之从网页搭建入门到Flask全栈项目实战(1) - ES6标准入门和Flex布局
1.简述 1.什么是ES6?ES6, 全称 ECMAScript 6.0,是 JavaScript 的下一个版本标准,2015年6月份发版.ES6的主要目的是为了解决 ES5 的先天不足. 2.了解E ...
- Python全栈工程师(编码)
ParisGabriel Python 入门基础 补充: 主流3操作大系统 Windows: Winxp Win7 Win8 Win10 Unix: Solaris(SUN) IO ...
随机推荐
- 2018.7.9 Android—显式Intent和隐式Intent的区别
1:都是用来在一个activity中启动另外一个activity 2:显示Intent直接指明要启动activity的定义,即activity.class:隐式intent通过在androidmani ...
- django视图层(views)
1.视图层概念 视图函数,其实就是一个简单的函数,它接收web请求并返回web响应(响应的可以是一个html,一个重定向,一个xml文档等等) 每个视图函数都负责返回一个HttpResponse对象. ...
- linux下jdk的安装配置
1.下载jdk:地址 选中你选择的版本,下载linux版本对应你系统的32位或64位. 我这里选择的是64位. 2.使用你的ssh直连工具把安装包丢到/usr/local/目录下 3.解压安装jdk ...
- Linux赋予普通用户root权限
本文以新建用户admin来举例,请自行替换自己需要的用户 方法一: vi编辑 /etc/sudoers 文件,找到 root ALL=(ALL) ALL,在下面添加一行,如下所示: ## ...
- Windows下MySQL数据库的安装与关闭开机自启动
我在学习java,安装数据库时找了很多教程,现在在这里总结一下我安装数据库的过程,我安装的是mysql-5.6.42-winx64版本的. 数据官方下载地址:https://dev.mysql.com ...
- 前端之HTML和CSS
html概述及html文档基本结构 html概述 HTML是 HyperText Mark-up Language 的首字母简写,意思是超文本标记语言,超文本指的是超链接,标记指的是标签,是一种用来制 ...
- tcp服务端socket
import socket if __name__ == '__main__': # 创建tcp服务端socket tcp_server_socket = socket.socket(socket.A ...
- java数组之二分法查找
认识: 猜字游戏 步数 所猜的数 结果 可能值的范围 0 1~100 1 50 太高 1~49 2 25 太低 26~49 3 37 太高 26~36 4 31 太低 32~36 5 34 太 ...
- python__系统 : socket_TCP相关
tcp和udp对比起来.还是tcp相对稳定一些,但是因为有三次挥手和四次握手,以及确认包(ack)的存在,可能在速度上会比udp慢. 用python的socket模块可以建立tcp服务端: from ...
- 使用python制作神经网络——搭建框架
一.神经网络的大体结构可分为三个函数,分别如下: 1.初始化函数 设定输入层节点,隐藏层节点和输出层节点的数量. 2.训练 学习给定训练集样本后,优化权重. 3.查询 给定输入,从输出节点给出答案 所 ...