#!/user/bin/env pthon # -*- coding: UTF-8 -*- # Created by: PyCharm. # Author: qinjie # Date: 2017/12/14 # Time: 08:47 ################## 创建file对象 ################## f1 = open(r'file/test2.txt','w') # 创建一个只写的file对象 f2 = open(r'file/test1.txt','r') # 创建一个只读的file对象 ff2 = open(r'file/test1.txt','r') # 创建一个只读的file对象 fff2 = open(r'file/test1.txt','r') # 创建一个只读的file对象 f3 = open(r'file/test1.txt') # 与上一个等价,默认参数‘r’ ################## 读取file对象 ################## f2String1 = f2.read() # 读取f2对象的所有内容,变成一个字符串 f3String = f3.read(10) # 读取f3对象10个字节(一个或多个)到一个字符串中 ff2String = ff2.readline() # 读取下一行(包括行末标识符)到一个字符串 fList = fff2.readlines() # 读取整个文件,把所有的行 组成一个列表 # print('f2String1 >>> ',f2String1) # print('f3String >>> ',f3String) # print('f2String2 >>> ',ff2String) # print('fList >>> ',fList) ################## 写入file对象 ################## f1.write(f2String1) # 写入字节字符串到文件 f1.writelines(fList) # 把字符串列表所有内容写入到文件中 f1.flush() # 把缓冲区(内存)的内容输出到硬盘,但不关闭文件 f1.close() # 手动关闭(当文件收集完成时,会替你关闭文件) f2.seek(10) # 修改文件位置,偏移量10 以便进行下一个操作 for line in open('file/test1.txt'): print('line >>> ',line) # 通过迭代器的方式读取文件内容 open('file/test1.txt',encoding='latin-1') # Python3.x Unicode文本文件(Str字符串) # open('text.bin','rb') # Python3.x 二进制byte文件(bytes字符串) ################## 实际用法(把对象写入到文件) ################## X,Y,Z = 43,44,45 S = 'SPAM' D = dict(a=1,b=2) L = [1,2,3] F = open('file/Object.txt','w') F.write(S + '\n') F.write('%s,%s,%s\n' % (X,Y,Z)) F.write(str(L) + '$'+ str(D) + '\n') F.close() ################## 实际用法(把对象写入到文件)eval 方法 ################## objF = open('file/Object.txt') o1 = objF.readline().rstrip() # 去掉末尾的换行符 print('o1 > ',o1) o2 = [int(x) for x in objF.readline().split(',')] print('o2 > ',o2) o3 = [eval(p) for p in objF.readline().split('$')] print('o3 > ' , o3) objF.close() ################## 实际用法(把对象写入到文件)pickle 方法 ################## DIC = dict(x=11,y=100) LT = ['1','9','heloo'] OF = open('file/objectData.pk','wb') import pickle pickle.dump(DIC,OF) # DIC对象序列化入OF文件 pickle.dump(LT,OF) # LT对象序列化入OF文件 OF.close() RF = open('file/objectData.pk','rb') dicR = pickle.load(RF) # 反序列化对象,用dicR接收 print("dicR :",dicR) ltR = pickle.load(RF) # 反序列化对象,用ltR接收 print("ltR :",ltR) ################## 实际用法(把对象写入到文件)struct 方法 ################## """ 有的时候需要用python处理二进制数据,比如,存取文件,socket操作时. 这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重要的三个函数是pack(), unpack(), calcsize() pack(fmt, v1, v2, ...) 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流) unpack(fmt, string) 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple calcsize(fmt) 计算给定的格式(fmt)占用多少字节的内存 struct中支持的格式如下表: Format C Type Python 字节数 x pad byte no value 1 c char string of length 1 1 b signed char integer 1 B unsigned char integer 1 ? _Bool bool 1 h short integer 2 H unsigned short integer 2 i int integer 4 I unsigned int integer or long 4 l long integer 4 L unsigned long long 4 q long long long 8 Q unsigned long long long 8 f float float 4 d double float 8 s char[] string 1 p char[] string 1 P void * long 注1.q和Q只在机器支持64位操作时有意思 注2.每个格式前可以有一个数字,表示个数 注3.s格式表示一定长度的字符串,4s表示长度为4的字符串,但是p表示的是pascal字符串 注4.P用来转换一个指针,其长度和机器字长相关 注5.最后一个可以用来表示指针类型的,占4个字节 为了同c中的结构体交换数据,还要考虑有的c或c++编译器使用了字节对齐,通常是以4个字节为单位的32位系统, 故而struct根据本地机器字节顺序转换.可以用格式中的第一个字符来改变对齐方式.定义如下: 参数说明 Character Byte order Size and alignment @ native native 凑够4个字节 = native standard 按原字节数 < little-endian standard 按原字节数 > big-endian standard 按原字节数 ! network (= big-endian) standard 按原字节数 """ Fbin = open('file/F.bin','wb') import struct binFW = struct.pack('>i4sh',7,b'spam',8) # >i4sh 见上图参数图 序列化对象 print(binFW) Fbin.write(binFW) Fbin.close() Fbin = open('file/F.bin','rb') binFR = Fbin.read() data = struct.unpack('>i4sh',binFR) # 反序列化对象 print('data >:',data)
python file常用操作简介
最新推荐文章于 2024-03-29 17:13:07 发布