''' 【课程8.1】 文件对象声明及基本操作 另一种数据格式:文件/文档 ''' # 本地文件的界定:指向一个本地存储的文件,是一个链接或者一个映射 path1 = 'C:/Users/Hjx/Desktop/text.txt' # 单个反斜杠:/ path2 = 'C:\\Users\\Hjx\\Desktop\\text.txt' # 两个斜杠:\\(第一个\是转义符) path3 = r'C:\Users\Hjx\Desktop\text.txt' # r用于防止字符转义 # 路径书写格式 print(path1) print(path2) print(path3) # 读取文件:open语句 f = open(path2, 'r') print(type(f)) print(f) print(f.read()) print('读取完毕') # open('路径', '模式', enconding = '编码' ) # 模式: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(),养成一个好习惯 ''' 【课程8.2】 系统模块下的路径操作 os 模块:提供了非常丰富的方法用来处理文件和目录 ''' # os模块:系统模块 - 常用命令 import os # 导入模块 print(os.name) # 输出字符串指示正在使用的平台。如果是window 则用'nt'表示,对Linux/Unix用户,它是'posix'。 print(os.getcwd()) # 函数得到当前工作目录,即当前Python脚本工作的目录路径。 print(os.listdir()) # 返回指定目录下的所有文件和目录名。 #os.chdir('C:\\Users\\Hjx\\Desktop\\' ) # 切换到目标路径 #print(os.getcwd()) #os.remove('text2.txt') # 删除一个文件 print(os.path.split('C:\\Users\\Hjx\\Desktop\\text.txt')) # 函数返回一个路径的目录名和文件名 print(os.path.exists('C:\\Users\\Hjx\\Desktop\\heheh.txt')) print(os.path.exists('C:\\Users\\Hjx\\Desktop\\')) # 用来检验给出的路径是否真地存在,这里不存在改文件故False,但路径存在故True # 相对路径和绝对路径 os.chdir('C:\\Users\\Hjx\\Desktop\\' ) f2 = open('text.txt','r') print(f2.read()) # 在申明了目录之后,就可以直接输出文件名了 → 相对路径 ''' 【课程8.3】 文件的读取与写入 os 模块:提供了非常丰富的方法用来处理文件和目录 ''' # 文件读取 - read f = open('C:\\Users\\Hjx\\Desktop\\text.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) for line in f.readlines(): print(type(line),line) # 遍历一个文件:for语句+f.readlines() # 答案代码 path = 'C:\\Users\\Hjx\\Desktop\\jiuba.txt' # 创建路径变量 f = open(path,'r') # 读取txt文件 m = [] # 新建一个空列表,用于存储数据 n = 0 for line in f.readlines(): n += 1 st1 = line.split(':') name = st1[0] # 先以:拆分,筛选出name文本 information = st1[1] # 第二部分包括lng,lat,address st2 = information.split(',') lng = float(st2[0]) # 筛选出lng lat = float(st2[1]) # 筛选出lat ad = st2[2].strip() # 筛选出address,去除末尾空格 data = [['name',name],['lng',lng],['lat',lat],['address',ad]] # 做成嵌套列表 m.append(dict(data)) # 生成字典,并追加如列表m #print('成功转换%i个数据'%n) print(m) print('\n数据转换完成!总共转换%i个数据'%n) # 文件写入 - write path = 'C:\\Users\\Hjx\\Desktop\\test_write.txt' f = open(path, 'w', encoding = 'utf8') f.write('hello world!') # 执行后直接创建“test_write.txt”文件,并写入“hello world!” # 12代表输入了12个字符,但是文件内真的有写入吗?打开看看 f.close() # 为什么没有?因为刚才是在内存里运行,我们需要再加上close才能写入 path = 'C:\\Users\\Hjx\\Desktop\\' f = open(path + 'test_write2.txt', 'w', encoding = 'utf8') lst = ['a','b','c','d','e'] f.writelines(lst) f.close() # f.writelines(list):依次把列表元素写入,但这里有没有提行? # 如果想每一个元素提行怎么办? → 每个元素后都有"\n" path = 'C:\\Users\\Hjx\\Desktop\\' 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" ''' 【课程8.4】 pickle模块的运用 pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。 python的pickle模块实现了基本的数据序列和反序列化 通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储 通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。 pickle.dump() / pickle.load() ''' # 存储: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\\Hjx\\Desktop\\data.pkl', 'wb') # 以二进制来存储:rb, wb, wrb, ab pickle.dump(data,pic) pic.close() # 将一个字典数据存成了pkl文件 # 读取:pickle.load(file) f = open( 'C:\\Users\\Hjx\\Desktop\\data.pkl', 'rb') st = pickle.load(f) print(st) # 直接读取pkl文件内的数据,该数据为一个字典
CH08数据读写
最新推荐文章于 2024-07-11 18:01:45 发布