专栏首页python3python 文件

python 文件

文件迭代器是最好的读取工具,从文本文件读取文字的最佳方式就是根本不要读取该文件

从文件读取的数据回到脚本是一个字符串。

#close是通常选项。调用close会终止外部文件的连接。

文件总是缓冲并且是可查的

#写进文件 myfile = open('myfile.txt', 'w') myfile.write('hello textfile\n') myfile.write('goodbye text file\n') myfile.close()

#读取文件 myfile = open('myfile.txt') print(myfile.readline()) print(myfile.readline()) print(myfile.readline()) #hello textfile

#goodbye text file

print(open('myfile.txt').read()) #hello textfile #goodbye text file

#文件迭代器往往是最佳选择 for line in open('myfile.txt'): print(line,end='') #hello textfile #goodbye text file #python3

文本文件内容为常规的字符串,自动执行Unicode编码和解码,默认行末换行。

二进制文件为一个特殊的bytes字符串

#python2

文本文件处理8位文本和二进制数据,有特殊的字符串类来处理unicodewenben

#python3中的区别源自于简单文本和unicode文本并为一种常规的字符串 #因为所有的文本都是unicode,包括ascii和其他8位编码 #文件中处理解析python对象 x, y, z = 43, 44, 45 s = 'spam' d = {'a':1, 'b':2} l = [1, 2, 3] f = open('datafile.txt','w') f.write(s +'\n') f.write('%s,%s,%s\n' % (x, y, z)) f.write(str(l) +'$' +str(d) + '\n') f.close()

chars = open('datafile.txt').read() print(chars) #spam #43,44,45 #[1, 2, 3]${'a': 1, 'b': 2}

f = open('datafile.txt') line = f.readline() print(line) #spam

line.rstrip() print(line) #spam

line = f.readline() print(line) #43,44,45

parts = line.split(',') print(parts) #['43', '44', '45\n'] print(int(parts[1])) # 44 numbers = [int(p) for p in parts] print(numbers) # [43, 44, 45] #int和一些其他的转换方法会忽略旁边的空白 line = f.readline() print(line) # [1, 2, 3]${'a': 1, 'b': 2} parts = line.split('$') print(parts) # ['[1, 2, 3]', "{'a': 1, 'b': 2}\n"] print(eval(parts[0])) # [1, 2, 3] obj = [eval(p) for p in parts] print(obj) # [[1, 2, 3], {'a': 1, 'b': 2}]

#用pickle存储python原生对象 d = {'a':1, 'b':2} f = open('datafile.pkl','wb') import pickle pickle.dump(d,f) f.close() f = open('datafile.pkl','rb') e = pickle.load(f) print(e) # {'a': 1, 'b': 2} print(open('datafile.pkl','rb').read()) #b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.' #文件中打包二进制数据的存储于解析 #struct模块能够构造和解析打包的二进制数据

#要生成一个打包的二进制数据文件,用wb模式打开它并将一个格式化字符串和几个python #对象传给struct,这里用的格式化字符串指一个4字节整数,一个包含4字符的字符串 #以及一个二位整数的数据包。这些都是按照高位在前的形式 f = open('data.bin','wb') import struct data = struct.pack('>i4sh',7,b'spam',8) print(data) f.write(data) f.close() #f = open('data.bin', 'rb') #data = f.read() #print(data)

values = struct.unpack('>i4sh',data) print(values) # (7, b'spam', 8)

#其他文件工具 #标准流,sys模块中预先打开的文件对象如sys.stdout #os模块中的描述文件 #socket。pipes。FIFO文件 #通过键开存储的文件 #shell流,op.popen和subprocess.Popen

#重访类型分类 #对象根据分类共享操作,如str,list,tuple都共享合并,长度,索引等序列操作 #只有可变对象可以原处修改 #文件导出的唯一方法 #对象分类

#对象类型 分类 是否可变

数字 数值 否

字符串 序列 否

列表 序列 是

字典 映射 是

元组 序列 否

文件 拓展 N/A

sets 集合 是

frozenset 集合 否

#bytearray 序列 是 l = ['abc', [(1,2),([3],4)],5] print(l[1]) # [(1, 2), ([3], 4)] print(l[1][1]) # ([3], 4) print(l[1][1][0]) # [3]

#引用vs拷贝 x = [1,2,3] l = ['a',x,'b'] print(l) # ['a', [1, 2, 3], 'b'] d = {'x':x,'y':2} print(d) # {'x': [1, 2, 3], 'y': 2} x[1] = 'surprise' print(l) # ['a', [1, 'surprise', 3], 'b'] print(d) # {'x': [1, 'surprise', 3], 'y': 2}

x = [1,2,3] l = ['a',x[:],'b'] print(l) # ['a', [1, 2, 3], 'b'] d = {'x':x[:],'y':2} print(d) # {'x': [1, 2, 3], 'y': 2} x[1] = 'surprise' print(l) # ['a', [1, 2, 3], 'b'] print(d) # {'x': [1, 2, 3], 'y': 2}

import copy l = [1,2,3] d = {'a':1,'b':2} e = l[:] D = d.copy()

#比较,相等性,真值 l1 = [1,2,4] l2 = [1,2,4] print(l1 == l2, l1 is l2) # True False

s1 = 'spam' s2 = 'spam' print(s1 == s2, s1 is s2) # True True a = 'a long strings qqq' b = 'a long strings qqq' print(a == b, a is b) # True True ......

d1 = {'a':1,'b':2} d2 = {'a':1,'b':3} print(sorted(d1.items()) < sorted(d2.items())) # True print(sorted(d1.keys()) < sorted(d2.keys())) # False print(sorted(d1.values()) < sorted(d2.values())) # True

真值 'spam' 1

假值 '' [] {} () 0.0 None

l = [None] *4 print(l) # [None, None, None, None] print(type([1]) == type([])) # True print(type([1]) == list) # True print(isinstance([1],list)) # True import types def f():pass print(type(f) == types.FunctionType) # True

#内置的类型陷阱 #赋值生成引用,而不是拷贝 l = [1,2,3] m = ['x',l,'y'] print(m) # ['x', [1, 2, 3], 'y'] l[1] = 0 print(m) # ['x', [1, 0, 3], 'y'] #为了避免这种问题,可以用分片来生成一个高级拷贝 l = [1,2,3] m = ['x',l[:],'y'] l[1] = 0 print(m) # ['x', [1, 2, 3], 'y']

重复能增加层次深度

l = [4,5,6] x = l 3 y = [l] 3 print(x) # [4, 5, 6, 4, 5, 6, 4, 5, 6] print(y) # [[4, 5, 6], [4, 5, 6], [4, 5, 6]] l[1] = 0 print(x) # [4, 5, 6, 4, 5, 6, 4, 5, 6] print(y) # [[4, 0, 6], [4, 0, 6], [4, 0, 6]]

留意循环数据结构

l = ['grail'] l.append(l) print(l) # ['grail', [...]] #不可变类型不可再原处修改 t = (1,2,3) t = t[:2] + (4,) print(t) # (1, 2, 4)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python从入门到放弃(二)

    如果是文字或者字母需要在括号内加上单引号,或者双引号,如果字母中带引号则使用双引号,避免冲突 数字则不加

    用户2398817
  • python基础3——运算符

    注: from future import division <---除法运算中python2导入此模块,除不尽时,小数部分也会显示,python3中不...

    用户2398817
  • 内置函数

    更多内置函数:https://docs.python.org/3/library/functions.html?highlight=built#ascii

    用户2398817
  • Python基础一: 计算机基础,Pyt

    content = '''sfkdsjalfjdslfksdjkfhsdajkfhsdjkfshdfsdkfhsdkfjsldakfjsdaflsdafjshd...

    用户2398817
  • 一文简单了解Python数据类型

    泽阳
  • 【python入门系列课程 第一课 打印一个字符画】

    本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地...

    用户7054460
  • python整型-浮点型-字符串-列表及内置函数(上)

    转换字符串的大小写(只影响字母) lower  upper  capitalize  swapcase  title

    suwanbin
  • python3学习笔记(1)----基

    2、标识符的第一个字母必须是字母(大小写字母)或者下划线,其他部分可以有字母和下划线和数字组成。 3、标识符名称对大小写敏感,例如myname和myName是不...

    用户2398817
  • Python基础长文

    最近发的一些都是python的一些实际应用篇,今天落地,从基础出发,将我的python自学之路:本年4月开始学python的基础笔记,分享给各位,本文字数跟阅读...

    公众号guangcity
  • python基础3——运算符

    注: from future import division <---除法运算中python2导入此模块,除不尽时,小数部分也会显示,python3中不...

    用户2398817

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动