一、文件路径
二、文件打开方式
write()只能写入字符串或二进制
三、文件复制操作
import os file_name = input('请输入一个文件路径:') if os.path.isfile(file_name): old_file = open(file_name,'rb') #以二进制形式读入 names = os.path.splitext(file_name) #['demo1','.txt'] # names = file_name.rpartition('.') #('demo1','.','txt') new_file_name = names[0] + '.bak' +names[1] #print(new_file_name) #test.bak.txt new_file = open(new_file_name,'wb') #以二进制形式写入 while True: content = old_file.read(1024) new_file.write(content) if not content: break new_file.close() old_file.close() else: print('您输入的文件不存在!')
其中:os.path.splitext(file_name):将file_name以后缀名开始切分成list,2014.1031.txt--->['2014.1031','.txt']
names = file_name.rpartition('.'):字符串操作函数rpartitio(),从右边切片。2014.1031.txt--->['2014.1031', '.', 'txt']
四、csv文件
CSV是什么
CSV是一种通用的、相对简单的文件格式(后缀名.csv),被用户、商业和科学广泛应用。
特点:多行之间用 换行 分隔;字段之间用逗号分隔
#python自带CSV模块 import csv def read_csv(): with open("data.csv","r",encoding="utf8") as csvFile: read = csv.reader(csvFile) for i in read:#i是列表类型 print(i[0])
read是一个列表的迭代器,每一行内容为一个列表。第一行为字段,如:[name,age,sex]
第二行开始是字段内容,如:李四,15,男
for i in read:#i是列表类型,i以每一行为一个列表
print(i[0])#是遍历第每一行第一列内容“”“
name
zs
ls”“”
for i in read: #i是列表类型
print(i) #是遍历所有行内容“”“
['name', 'age', 'height']
['zs', '15', '173']
['ls', '28', '182']”“”
read_csv() #读取CSV文件的指定行 list = ['a','b','c'] for (i,v) in enumerate(list): print("%d -> %s"%(i,v)) def read_csv_row(): with open("data.csv","r",encoding="utf8") as csvFile: #读取CSV文件,返回的是迭代类型(list,字典等能循环的类型) read = csv.reader(csvFile) for (row,v) in enumerate(read): # (row,v)row第几行,v行内容 if(row > 0): print("%d : %s"%(row,v)) ”“” 1 : ['zs', '15', '173'] 2 : ['ls', '28', '182'] “”“
五、Json操作
1、序列化和反序列化
通过文件操作,可将字符串写入到一个本地文件,但是无法将一个对象,如字典,列表,元组直接写入到一个文件里,这是就需要将这个对象进行序列化,然后写入文件。
设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字节序列恢复到内存中,就是反序列化。
序列化: 将对象转换为字节序列。
反序列化:将字节序列转换为对象。
Python中JSON模块可用来实现数据的序列化和反序列化。
JSON:Javascript Object Notation ,一种轻量级的数据交换标准。JSON的本质是字符串。
(1) 使用JSON实现序列化
JSON提供了dump和dumps方法,将一个对象序列化。把对象转换为字符串,方法本身不具备将数据写入到文件的功能。
dumps( ) 方法测试
import json names = [‘Jack’, ‘Dennis’, ‘Ritchie’, ‘Mike’, ‘Tony’] # dumps 传入一个对象,转换为一个JSON字符串 result = json.dumps(names) print(result) print(type(result)) # <class ‘str’> with open('json.txt', 'w') as f: f.write(result) f.close()
dump() 方法测试:将对象转换为字符串的同时,指定一个文件对象,把转换后的字符串写入到这个文件
import json names = ['Jack', 'Dennis', 'Ritchie', 'Mike'] fp =open(‘json2.txt’, ‘w’) json.dump(names, fp) fp.close() # 或者 with open(‘json3.txt’, ‘w’) as f: json.dump(names, f) f.close()
dump() 方法实现了对象序列化的同时写入文件。
(2)使用JSON实现反序列化
反序列化:将JSON的字符串变成一个Python对象
使用load( )方法:读取一个文件,并把文件中的json字符串加载成一个对象
with open(‘json.txt’, ‘r’) as f: with open('json.txt', 'r') as f: content = f.read() print(content) print(type(content)) """ ["Jack", "Dennis", "Ritchie", "Mike"] <class 'str'>读取的输出是字符串 """ f.close()
with open(‘json.txt’) as f: result = json.load(f) print(result) print(type(result)) ”“” ['Jack', 'Dennis', 'Ritchie', 'Mike'] <class 'list'> “”“ f.close()
直接将字符串转换为列表对象了
只能转换一些基本数据类型不能自定义类
但是可以将类属性转为字典再转换为json字符串
p = Person('zhangsan',18)
p.__dict__为字典:
p_json = json.dump(p.__dict__)---->json字符串
p_dict = json.load(p_json)---->字典
(3) 使用pickle模块实现序列化 和反序列化
同样使用pickle.dumps(对象)----->转为字符串 with open('pickle.txt','wb') as f: f.write(pickle.dumps(对象))#写入文件中 pickle.dump(对象,open('pickle.txt','wb')),转为字符串同时写入文件 with open('pickle.txt','rb') as f: pickle.loats(f.read()) #写入文件中 #将文件中的字符串读出来并转为对象,反序列化过程 pickle.loat(open('pickle.txt','rb'))
对象可以为dirt\list甚至自定义类对象
JSON和pickle序列化和反序列化区别:
pickle里将数据原封不动转换为二进制,但这个二进制只能在python识别
json只能保存部分信息,可以在不同平台传递数据,但是json里存储数据都是基本的数据类型,不能是自定义的类对象。