作为一个Python初学者,我想通过写博客的方式来记录下来自己成长的过程,同时也分享一下自己学习到的知识。以下都是一个Python初学者对Python语言的一些浅见和个人理解。
#创建文件对象open()
‘’’
open()函数用于创建文件对象,基本语法格式如下:
open(文件名[,打开方式])
如果只是文件名,代表在当前目录下的文件。文件名可以录入全路径,比如:D:\a\b.txt。为了减少“\”的输入,可以使用原始字符串:r"d:\b.txt"
打开方式有如下几种:
模式 描述
r 读模式
w 写模式,如果文件不存在则创建;如果文件存在,则重新写内容
a 追加模式,如果文件不存在则创建;如果文件存在,则在文件末尾追加内容
b 二进制模式(可与其他模式组合使用)
+ 读、写模式(可与其他模式组合使用)
文本文件对象和二进制文件对象的创建:
如果我们没有增加模式b,则默认是创建文本文件对象,处理的基本单元是字符。如果是二进制模式b,则创建的是二进制文件对象,处理的基本单元是字节
文件的写入:
1.创建文件对象
2.写入数据
3.关闭文件对象
‘’’
#中文乱码问题:windows操作系统默认的编码是GBK,Linux操作系统默认的编码是UTF-8。当我们用open()时,调用的是操作系统打开的文件,默认的编码是GBK
f = open(r"b.txt","w")
f.write("世界和平\n中国力量\n")
f.close()
#write()/writelines()写入数据
‘’’
write():把字符串a写入文件中
writelines(b):把字符串列表写入文件中,不添加换行符
'''
f = open(r"d:\bb.txt", "w", encoding='utf-8')
s = ["小一\n", "小二\n", "小三\n"]
f.writelines(s)
f.close()
#close()关闭文件流
‘’’
由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用close()方法关闭文件对象。当调用close()方法时,首先会把缓冲区数据写入文件
(也可以直接调用flush()方法),再关闭文件,释放文件对象
为了确保打开的文件对象正常关闭,一般结合异常机制的finally或者with关键字实现无论何种情况都能关闭打开的文件对象
‘’’
try:
f = open(r"my01.txt","a")
str = "haha"
f.write(str)
except BaseException as e:
print(e)
finally:
f.close()
#with()语句(上下文管理器)
‘’’
with关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正常的关闭,并且可以在代码执行完毕后自动还原进入
该代码块时的现场
‘’’
s = ["China\n", "I love you\n", "Forever"]
with open(r"my02.txt", "w") as f:
f.writelines(s)
#文本文件的读取
‘’’
文件的读取一般使用如下三个方法:
1.read([size])
从文件中读取size个字符,并作为结果返回。如果没有size参数,则读取整个文件。读取到文件末尾,会返回空字符串
2.readline()
读取一行内容作为结果返回。读取到文件末尾,会返回空字符串
3.readlines()
文本文件中,每一行作为一个字符串存入列表中,返回该列表
‘’’
#读取一个文件的前4个字符
with open(r"my02.txt", "r", encoding="utf-8") as f:
print(f.read(4))
#按行读取一个文件
with open(r"my02.txt", "r") as f:
while True:
fragment = f.readline()
if not fragment:
break
else:
print(fragment, end="")
#enumerate()函数和推导式生成列表 操作每行增加行号
with open("my02.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
lines = [line.rstrip()+"#"+str(index+1)+"\n" for index, line in enumerate(lines)] #推导式生成列表
with open("my02.txt", "w", encoding="utf-8") as f:
f.writelines(lines)
#二进制文件的读取或写入
‘’’
二进制文件的处理流程和文本文件流程一致。首先还是要创建文件对象,不过,我们需要指定二进制模式,从而创建出二进制文件对象。例如:
f = open(r"d:\a.txt",‘wb’) #可写的、重写模式的二进制文件对象
f = open(r"d:\a.txt",‘ab’) #可写的、追加模式的二进制文件对象
f = open(r"d:\a.txt",‘rb’) #可读的二进制文件对象
创建好二进制文件后,仍然可以使用write()、read()实现文件的读写操作
‘’’
#读取图片文件,实现文件的拷贝
with open("aa.JPG", 'rb') as f:
with open('aa_copy.JPG', 'wb') as w:
for line in f.readlines():
w.write(line)
print("图片拷贝完成!")
#文件对象的常用属性和方法
‘’’
name():返回文件的名字
tell():返回文件指针的当前位置
seek(offset[,whence]):把文件指针移动到新的位置,offset表示相对于whence的位置:
offset:
off为正往结束方向移动,为负往开始方向移动
whence:不同的值代表不同的含义
0:从文件头开始计算(默认值)
1:从当前位置开始计算
2:从文件尾开始计算
‘’’
with open("my02.txt", 'r', encoding='utf-8') as f:
print("文件名是:{0}".format(f.name))
print(f.tell())
print("读取的内容:{0}".format(str(f.readline())))
print(f.tell())
f.seek(4)
print("读取的内容:{0}".format(str(f.readline())))
#使用pickle序列化
‘’’
序列化:指的是将对象转化成串行化数据形式,存储到硬盘或通过网络传输到其他地方。
反序列化:指相反的过程,将读取到的串行化数据转化成对象
我们可以使用pickle模块中的函数,实现序列化和反序列操作
pickle.dump(obj,file) #obj就是要被序列化的对象,file指的是存储的文件
pickle.load(file) #从file读取数据,反序列化成对象
‘’’
import pickle
a1 = "哈哈"
a2 = 234
a3 = [10,20,30,40]
with open("data.dat", 'wb') as f:
pickle.dump(a1, f)
pickle.dump(a2, f)
pickle.dump(a3, f)
with open("data.dat", 'rb') as f:
b1 = pickle.load(f)
b2 = pickle.load(f)
b3 = pickle.load(f)
print(b1)
print(b2)
print(b3)
#CSV文件的操作
‘’’
csv是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。与Excel文件不同,CSV文件中:
1.值没有类型,所有值都是字符串
2.不能指定字体颜色等样式
3.没有多个工作表
4.不能嵌入图像图表
‘’’
import csv
with open("aaa.csv", 'r') as f:
a_csv = csv.reader(f)
for row in a_csv:
print(row)
with open("ee.csv", 'w') as f:
b_csv = csv.writer(f)
b_csv.writerow(["ID", "姓名", "年龄"])
b_csv.writerow(["1001", "哈哈", "18"])
c = [["1002", "嘻嘻", "6"],["1003", "呵呵", "8"]]
b_csv.writerows()