Python数据分析
5. 数据读写
5.1 文件对象声明及基本操作
另一种数据格式:文件/文档
1. 本地文件的界定
指向一个本地存储的文件,是一个链接或者一个映射
path1 = 'C:/Users/Xpx/python数据分析/text.txt' # 单个反斜杠:/
path2 = 'C:\\Users\\Xpx\\python数据分析\\text.txt' # 两个斜杠:\\(第一个\是转义符)
path3 = r'C:\Users\Xpx\python数据分析\text.txt' # r用于防止字符转义
# 路径书写格式
print(path1)
print(path2)
print(path3)
2. 读取文件:open语句
open(‘路径’, ‘模式’, enconding = ‘编码’ )
f = open(path2, 'r')
print(type(f))
print(f)
print(f.read())
print('读取完毕')
模式:r:读取文件,默认;w:写入;rw:读取+写入;a:追加
简答的读取方法:.read() → 读取后,光标将会留在读取末尾
print(f.read())
print('读取为空')
运行第一次.read()之后,光标位于末尾,再次读取输出为空
f.seek(0)
print(f.read())
print('第二次读取')
所以现在用 f.seek(0) 来移动光标
f.close()
print(f.read()) # 关闭后无法读取
关闭文件链接 f.close(),养成一个好习惯
5.2 系统模块下的路径操作
os 模块:提供了非常丰富的方法用来处理文件和目录
import os # 导入模块
输出字符串指示正在使用的平台。如果是window 则用’nt’表示,对Linux/Unix用户,它是’posix’。
print(os.name)
函数得到当前工作目录,即当前Python脚本工作的目录路径。
print(os.getcwd())
返回指定目录下的所有文件和目录名。
print(os.listdir())
切换到目标路径
os.chdir('C:\\Users\\Xpx\\Desktop\\' )
print(os.getcwd())
删除一个文件
os.remove('text2.txt')
函数返回一个路径的目录名和文件名
print(os.path.split('C:\\Users\\Xpx\\python数据分析\\text.txt'))
print(os.path.exists('C:\\Users\\Xpx\\python数据分析\\heheh.txt'))
print(os.path.exists('C:\\Users\\Xpx\\python数据分析\\'))
#用来检验给出的路径是否真地存在,这里不存在改文件故False,但路径存在故True
相对路径和绝对路径
os.chdir('C:\\Users\\Xpx\\python数据分析' )
f2 = open('text.txt','r')
print(f2.read())
# 在申明了目录之后,就可以直接输出文件名了 → 相对路径
5.3 文件的写入和读取
os 模块:提供了非常丰富的方法用来处理文件和目录
1. 文件读取——read
f = open('C:\\Users\\Xpx\\python数据分析\\text.txt', 'r')
print(f.read())
f.read(n):n代表读取多少个字符
f.seek(0)
print(f.read(2))
# f.read(n):n代表读取多少个字符
f.readline(): 读取行到字符串,一次性读取一行
f.readline(n):读取该行的前n个字符
f.seek(0)
print(f.readline())
print(f.readline())
print(f.readline(4))
遍历一个文件:for语句+f.readlines()
f.seek(0)
for line in f.readlines():
print(type(line),line)
2. 文件写入——write
path = 'C:\\Users\\Xpx\\python数据分析\\text_write.txt'
f = open(path, 'w', encoding = 'utf8')
f.write('hello world!')
# 执行后直接创建“test_write.txt”文件,并写入“hello world!”
# 12代表输入了12个字符
但是此时打开text_write.txt文件是空白的
为什么没有?因为刚才是在内存里运行,我们需要再加上close才能写入
f.close()
f.writelines(list):依次把列表元素写入,但这里有没有提行?
path = 'C:\\Users\\Xpx\\python数据分析\\'
f = open(path + 'text_write2.txt', 'w', encoding = 'utf8')
lst = ['a','b','c','d','e']
f.writelines(lst)
f.close()
如果想每一个元素提行怎么办? → 每个元素后都有"\n"
path = 'C:\\Users\\Xpx\\python数据分析\\'
f = open(path + 'test_write2.txt', 'w', encoding = 'utf8')
lst = ['a','b','c','d','e']
for i in range(len(lst)):
lst[i] = lst[i] + '\n'
f.writelines(lst)
f.close()
n = list(range(1,11))
v = ['a','b','c','d','e','f','g','h','i','j']
f = open( 'C:\\Users\\Xpx\\python数据分析\\test_write3.txt', 'w', encoding = 'utf8')
m = []
for i in range(len(n)):
f.writelines([str(n[i]),',',v[i] + '\n'])
f.close()
5.4 pickle模块的运用
pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。
python的pickle模块实现了基本的数据序列和反序列化
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
pickle.dump() / pickle.load()
1. 存储
- pickle.dump(obj, file, [,protocol])
import pickle
data = {'a':[1,2,3,4], 'b':('string','abc'), 'c':'hello'}
print(data)
# 创建一个字典变量data
pic = open( 'C:\\Users\\Xpx\\python数据分析\\data.pkl', 'wb')
# 以二进制来存储:rb, wb, wrb, ab
pickle.dump(data,pic)
pic.close()
2. 读取
- pickle.load(file)
f = open( 'C:\\Users\\Xpx\\python数据分析\\data.pkl', 'rb')
st = pickle.load(f)
print(st)
# 直接读取pkl文件内的数据,该数据为一个字典