文件:
文件操作介绍:
1.文件的作用:
一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”。 默认数据是加载到内存中,结果也是保存到内存中, 程序执行结束,所有的数据释放。
2.文件的打开与关闭:
宋丹丹拉高音调说:这个得分成三步,第一步打开冰箱;第二步,把大象塞进冰箱里;第三步,把冰箱关上。在操作文件的整体过程与将大象放入冰箱的过程是很相似的。
1)文件的打开:
在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。
open(文件名,访问模式) e.g. f = open(‘test.txt’, ‘w’)
如果文件不存在那么创建,如果存在那么就先清空,然后写入数据。
r:只读
w:清空写入(不读)
a:追加写入(不读)
w+:读并且清空写入
r+:读且从文件开头写入
a+:读且从末尾追加写入
2) File对象的属性
3)File对象的常用方法
seek(offset, from)有2个参数:
offset:偏移量
from:方向 0:表示文件开头; 1:表示当前位置; 2:表示文件末尾
练习:
1). 把位置设置为:从文件开头,偏移5个字节 seek(5,0)。
2). 把位置设置为:离文件末尾,3字节处 seek(-3,2)。(python3中无法完成)
3) 文件的关闭
方法一: 调用close() :方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,
并且操作系统同一时间能打开的文件数量也是有限的:
方法二: Python引入了with语句来自动帮我们调用close()方法:
with语句的工作原理:
python中的with语句使用于对资源进行访问的场合,保证不管处理过程中是否发生错误或者异常都会自动执行规定的(“清理”)操作,释放被访问的资源,比如有文件读写后自动关闭、线程中锁的自动获取和释放等。
文件应用:文件的备份
输入文件的名字,然后程序自动完成对文件进行备份。
关于操作系统:OS
os,语义为操作系统,处理操作系统相关的功能,可跨平台。 比如显示当前目录下所有文件/删除某个文件/获取文件大小……
关于路径:
os模块
os模块中的rename()可以完成对文件的重命名操作。
rename(需要修改的文件名, 新的文件名)
os模块中的remove()可以完成对文件的删除操作
remove(待删除的文件名)
os模块的其他操作
JSON 部分
1.什么是json?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。
这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
2.python数据类型和json数据类型相互转换格式
python 中str类型到JSON中转为unicode类型,None转为null,dict对应object;
pyhton中的集合不能转成json格式。
3.数据类型编码
dump: 将对象序列化并保存到文件
load: 将序列化字符串从文件读取并反序列化
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
encoding=“utf-8”, default=None, sort_keys=False, **kw)
ensure_ascii=False: 中文存储需要设定
indent=4: 增加缩进,增强可读性,但缩进空格会使数据变大
separators=(’,’,’:’): 自定义分隔符,元素间分隔符为逗号, 字典key和value值的分隔符为冒号
sort_keys=True: 字典排序
4.序列化与反序列化参数
Pickle模块详解
1.定义:
python的pickle模块实现了python的所有数据序列和反序列化。与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。
2.pickle模块与json模块的区别
1、JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。
2、JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。
练习部分
1.读取一个文件,显示除了以井号(#)开头的行以外的所有行。
练习结果:
2.制作一个"密码薄",其可以存储一个网址(例如 www.csdn.net),和一个密码(例如 123456),请编写程序完成这个“密码薄”的增删改查功能,并且实现文件存储功能。
实验代码:
import json
dict = {}
def mibaben():
for i in range(1, 3):
name = input("请输入网址:")
passwd = input("该网址的密码为:")
dict[name] = passwd
a = json.dumps(dict, sort_keys=True)
x = open('mimaben1.txt', 'w')
x.writelines(a)
x.close()
def tianjia():
dict.update({input("输入新网站:"): input("输入新密码:")})
a = json.dumps(dict, sort_keys=True)
x = open('mimaben1.txt', 'a+')
x.writelines(a)
x.close()
def shanchu():
dict.pop(input("要删除的网址为:"))
a = json.dumps(dict, sort_keys=True)
x = open('mimaben1.txt', 'a+')
x.writelines(a)
x.close()
mibaben()
if input() == 'xiugai':
tianjia()
if input() == "shanchu":
shanchu()
3. 学生管理系统(文件版)
1). 必须使用自定义函数,完成对程序的模块化
2). 学生信息至少包含:姓名、年龄、学号,除此以外可以适当添加
3). 必须完成的功能:添加、删除、修改、查询、退出
4.无重复字符的最长子串longest-substring-without-repeating-characters
代码:
def lengthOfLongestSubstring(s):
"""
:type s: str
:rtype: int
"""
# 存储历史循环中最长的子串长度
max_len = 0
# 判断传入的字符串是否为空
if s is None or len(s) == 0:
return max_len
# 定义一个字典,存储不重复的字符和字符所在的下标
str_dict = {}
# 存储每次循环中最长的子串长度
one_max = 0
# 记录最近重复字符所在的位置+1
start = 0
for i in range(len(s)):
# 判断当前字符是否在字典中和当前字符的下标是否大于等于最近重复字符的所在位置
if s[i] in str_dict and str_dict[s[i]] >= start:
# 记录当前字符的值+1
start = str_dict[s[i]] + 1
# print start
# 在此次循环中,最大的不重复子串的长度
one_max = i - start + 1 #pwwpss
# 把当前位置覆盖字典中的位置
str_dict[s[i]] = i
# 比较此次循环的最大不重复子串长度和历史循环最大不重复子串长度
max_len = max(max_len, one_max)
return max_len
print(lengthOfLongestSubstring('pwwssffasdf'))
4.矩阵置零set-matrix-zeroes