版权声明:本文为博主原创文章,未经博主允许不得转载。
文章目录
- 一、数据读写
- 1.1 文件对象声明
- 1.2 基本操作
- 1.2.1 读取文件:open语句
- 1.3 系统模块下的路径操作
- 1.3.1 os模块:系统模块
- 1.3.2 相对路径和绝对路径
- 1.4 文件的读取
- 1.4.1 read:文件读取
- 1.4.2 小作业
- 1.5 文件的写入
- 1.5.1 f.write()
- 1.5.2 f.close()
- 1.5.3 f.writelines()
- 1.5.4 小作业
- 1.6 pickle模块的运用
- 1.6.1 pickle.dump()
- 1.6.2 pickle.load()
一、数据读写 1.1 文件对象声明
另一种数据格式:文件/文档
# 本地文件的界定:指向一个本地存储的文件,是一个链接或者一个映射 # 路径书写格式 path_01 = 'C:\Users\lsj\Desktop\test.txt' # 两个斜杠:\(第一个是转义符) path_02 = 'C:/Users/lsj/Desktop/test.txt' # 单个反斜杠:/ path_03 = r'C:UserslsjDesktoptest.txt' # r用于防止字符转义 print(path_01) print(path_02) print(path_03)1.2 基本操作 1.2.1 读取文件:open语句
f = open(path_02, 'r', encoding='utf-8')
print(type(f))
print(f.read())
# open('路径', '模式', enconding = '编码' )
# 模式:r:读取文件,默认;w:写入;rw:读取+写入;a:追加
# 简答的读取方法:.read() → 读取后,光标将会留在读取末尾
print('—————————第二次读取———————————')
print(f.read())
print('读取为空')
# 运行第一次.read()之后,光标位于末尾,再次读取输出为空
print('—————————第三次读取———————————')
f.seek(0)
print(f.read())
print('第三次读取')
# 所以现在用 f.seek(0) 来移动光标:0 代表最开始的位置
print('—————————第四次读取———————————')
f.close()
# print(f.read()) # 关闭后无法读取
# 关闭文件链接 f.close(),养成一个好习惯
1.3 系统模块下的路径操作
1.3.1 os模块:系统模块
# 导入模块 import os # 输出字符串指示正在使用的平台。如果是window 则用'nt'表示,对Linux/Unix用户,它是'posix' print(os.name) # 函数得到当前工作目录,即当前Python脚本工作的目录路径 print(os.getcwd()) # 返回指定目录下的所有文件和目录名 print(os.listdir())
# 切换到目标路径
os.chdir('C:\Users\lsj\Desktop\')
print(os.getcwd())
# 删除一个文件
os.remove('test.txt')
# 函数返回一个路径的目录名和文件名
print(os.path.split('C:\Users\lsj\Desktop\test.txt'))
# 用来检验给出的路径是否真地存在,这里不存在改文件故False,但路径存在故True
print(os.path.exists('C:\Users\lsj\Desktop\test.txt'))
print(os.path.exists('C:\Users\lsj\Desktop\'))
1.3.2 相对路径和绝对路径
# 相对路径
os.chdir('C:\Users\lsj\Desktop\')
f2 = open('test.txt', 'r')
print(f2.read())
# 在声明了目录之后,就可以直接输出文件名了 → 相对路径
# 绝对路径
f1 = open('C:\Users\lsj\Desktop\test.txt', 'r', encoding='utf-8')
print(f1.read())
补充
os 模块:提供了非常丰富的方法用来处理文件和目录
1.4.1 read:文件读取f = open('C:\Users\lsj\Desktop\test.txt', 'r')
print(f.read())
# 直接读取(这里光标默认会在最末尾)
f.seek(0) print(f.read(2)) # f.read(n):n 代表读取多少个字符
f.seek(0) print(f.readline()) # 读取行到字符串,一次性读取一行 print(f.readline()) print(f.readline(4)) # f.readline(n):读取该行的前n个字符
f.seek(0)
print(f.readlines()) # 列表类型
f.seek(0)
# 遍历一个文件:for语句+f.readlines()
for line in f.readlines():
print(type(line), line)
1.4.2 小作业
利用百度POI小插件爬取一些poi数据,然后存成txt,再用python读取,编写成一个json形式(列表字典):
[{'name':'...', 'lng':..., 'lat':..., 'address':'...'},{...},...,]
jiuba.txt
方法 一
path = 'C:\Users\lsj\Desktop\jiuba.txt'
f = open(path, 'r') # 读取 txt 文件
m = []
n = 0
for line in f.readlines():
n += 1
str1 = line.split(':')
name = str1[0] # 先以:拆分,筛选出name文本
infomation = str1[1] # 第二部分包括lng,lat,address
str2 = infomation.split(',')
lng = str2[0] # 筛选出lng
lat = str2[1] # 筛选出lat
address = str2[2].strip() # 筛选出address,去除末尾空格
# 做成嵌套列表
data = [['name',name],['lng',lng],['lat',lat],['address', address]]
# 生成字典,并追加如列表m
m.append(dict(data))
# print('成功转换 %i 个数据'%n)
print(m)
print('n 数据转换完成!总共转换%i个数据'%n)
方法二:Excel 实现
新建Excel —— 数据 —— 自文本 —— 选中文件 —— 分隔符号:和 , ——......——插入—— 三维地图 ——1.5 文件的写入 1.5.1 f.write()
path = 'C:\Users\lsj\Desktop\test_write.txt'
f = open(path, 'w', encoding='utf8')
f.write('Hello World!')
# 执行后直接创建“test_write.txt”文件,并写入“hello world!”
# 12代表输入了12个字符,但是文件内真的有写入吗?打开看看
1.5.2 f.close()
f.close() # 为什么没有?因为刚才是在内存里运行,我们需要再加上close才能写入1.5.3 f.writelines()
path = 'C:\Users\lsj\Desktop\' f = open(path + 'test_write_02.txt', 'w', encoding='utf-8') lst = ['a','b','c','d', 'e'] f.writelines(lst) f.close() # f.writelines(list):依次把列表元素写入,但这里有没有提行? # 如果想每一个元素换行怎么办? → 每个元素后都有"n"
path = 'C:\Users\lsj\Desktop\'
f = open(path + 'test_write_02.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"
1.5.4 小作业
两个列表[1......10],[a.......j],写入一个txt,变成以下格式 1,a 2,b 3,c
n = list(range(1,11))
v = ['a','b','c','d','e','f','g','h','i','j']
f = open('C:\Users\lsj\Desktop\test_write_03.txt', 'w', encoding='utf8')
m = []
for i in range(len(n)):
lst = [str(n[i]), ',', v[i] + 'n']
m.append(lst)
f.writelines(lst)
f.close()
print(m)
print('finished !')
# ['1,a', '2,b']
1.6 pickle模块的运用
pickle 提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上 python 的 pickle 模块实现了基本的数据序列和反序列化 通过 pickle 模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储 通过 pickle 模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。 pickle.dump() / pickle.load()1.6.1 pickle.dump()
# 存储: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\lsj\Desktop\data.pkl', 'wb')
# 以二进制来存储:rb, wb, wrb, ab
pickle.dump(data, pic)
pic.close()
1.6.2 pickle.load()
# 读取:pickle.load(file)
f = open('C:\Users\lsj\Desktop\data.pkl', 'rb')
st = pickle.load(f)
print(st)
# 直接读取pkl文件内的数据,该数据为一个字典
版权声明:本文为博主原创文章,未经博主允许不得转载。



