博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python_文件的打开和关闭
阅读量:5234 次
发布时间:2019-06-14

本文共 5120 字,大约阅读时间需要 17 分钟。


文件对象 = open('文件名','使用方式')
rt:读取一个txt文件
wt: 只写打开一个txt文件,(如果没有该文件则新建该文件)会覆盖原有内容
at:打开一个txt文件,并从文件指针位置追加写内容(文件指针默认在末尾)
文件操作错误属于:I/O异常
通常的异常:

1 try:2     f = open('a.txt','wt')3 except Exception as e:4     print(e)

#文件的写操作
# 函数:   文件对象.write(s)其中s是待写入文件的字符串{文件对象需要时可写入的对象}

1 try:2     fobj = open('anc.txt','wt')     #wt:可写入操作方式/at为在原有的文件内容追加写入3     fobj.write('\nmore')    #写函数4     fobj.close()5 6 except Exception as err:7     print(err)8 9 #结果:anc文件保存至当前目录下,并写入“[换行]more”

 

#案例:学生信息储存

1 name = 'wanzi' 2 gender = '男' 3 age = 23 4 try: 5     f = open('students.txt','wt') 6     while True: 7         #s = Student(i) 8         #if s: 9         f.write("namegenderge")10         ans = input("continue(Y/y):")11         if ans != 'Y' and ans != 'y':12             break13         i = i+114     f.close()15 16 except Exception as e:17     print(e)

 

#读文件操作  文件对象.read(n) //返回全部字符串或者n字节字符

1 def writeFile():    #写文件操作 2     f = open('abc.txt','wt') 3     f.write("Hello world\nI am Code_boy\nMirror_")  #三行数据(两个\n) 4     f.close() 5  6 def readFile():     #读文件操作 7     f = open('abc.txt','rt') 8     sread = f.read()    #文件内容读取 [如果read(n)有值,则读取n个字符,为空则读取全部] 9     print(sread)    #将读取的内容打印输出10     f.close()11 12 try:13     writeFile() #调用写文件函数,写入文件14     readFile()  #调用读文件函数,读出(打印)文件内容15 except Exception as e:16     print(e)17 18 '''19 结果:20 Hello world21 I am Code_boy22 Mirror_23 '''

 

#读文件操作 文件对象.readline()  //返回一行字符串(读取连续的字符串,遇到\n或文件末尾结束)

1 def writeFile(): 2     f = open('readline.txt','wt') 3     f.write('Hello\nworld') 4     f.close() 5  6 def readlineFile(): 7     f = open('readline.txt','rt') 8     sreadline = f.readline()    #读取readline文件(只读一行) 9     print(sreadline,'len=',len(sreadline))10     sreadline = f.readline()11     print(sreadline, 'len=', len(sreadline))12     sreadline = f.readline()13     print(sreadline, 'len=', len(sreadline))14     15     f.close()16 try:17     writeFile()18     readlineFile()19 except Exception as e:20     print(e)21 22 结果:23 Hello           #readline中的文件内容: Hello\nworld 结合readline的功能,在读取一行的数据24  len= 6         # ‘Hello\n’ >>>> 共计6个字节(换行是因为读取了\n)25 world len= 5    #如上类说明26  len= 0         #文件指针已到达末尾,无法继续读出数据故 len = 0

 

   
# .readline()可以使用循环的方式(判断是否读取为空)来读取全部,一般都是使用读单行内容
#但是! .readlines(){加了一个‘s'}就可以直接读取全部数据:

1 def writeFile(): 2     f = open('readline.txt','wt') 3     f.write('Hello\nworld') 4     f.close() 5  6 def readlinesFile(): 7     f = open('readline.txt','rt') 8     sreadlines = f.readlines()    #读取readlines文件(读全部行)并以list形式返回 9     #因为是以列表格式返回,所以一般情况下会配合循环(for)从readlines()提取每一行循环打印输出10     for i in range(len(sreadlines)):        #1号:利用for输出11         print(sreadlines[i],end='')12 13     print(sreadlines)   #读全部内容,并且每一行用'\n'(显示)隔开    #2号:直接输出14     f.close()15 16 try:17     writeFile()18     readlinesFile()19 except Exception as error:20     print(error)21 '''22 1号结果:23 Hello24 world25    2号结果:26 ['Hello\n', 'world']        #>>>也就是readlinese()读取数据的储存(list)形式27 '''

 

#读取文件中的学生信息

1 f = open('student1.txt','rt') 2 while True: 3  4     name = f.readline().strip('\n')# *.strip()>>用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。 5     if name == '': 6         break 7     gender = f.readline().strip('\n') 8     age = f.readline().strip('\n') 9 f.close()10 print(name,gender,age)

#文件编码
#GBK编码:中文字符包含简体和繁体字符,每个字符仅能存储简体中文字符 汉字占二字节
#*UTF-8编码:全球通用的编码(默认使用)汉字占三字节
#文件打开时,可以指定用encoding参数指定编码例如:
#   f = open('x.txt','wt',encoding = 'utf-8')
# 文件编码直接决定了文件的空间大小

#案例:UTF-8文件编码

1 def writeFile(): 2     f = open('utf.txt','wt',encoding = 'utf-8') 3     f.write('Hello I am 王宇阳') 4     f.close() 5  6 def readFile(): 7     f = open('utf.txt','rt',encoding='utf-8') 8     sreadlines = f.readlines() 9     for i in sreadlines:10         print(i)11     f.close()12 try:13     writeFile()14     readFile()15 except Exception as error:16     print(error)17 18 # 结果:   Hello I am 王宇阳

 

#文件指针(文件结束标志:EOF)...文件对象.tell()[返回一个整数,整数则是指针的位置]

1 f = open('zz.txt','wt',encoding='utf-8') 2 print(f.tell())     #指针位置:0 3 f.write('abcdef 你好') 4 print(f.tell())     #指针位置:13 5 f.close() 6 f = open('zz.txt','rt',encoding='utf-8') 7 f.tell()   #文件指针归零 8 s = f.read(3) 9 print(s,f.tell())   #输出read读取内容并返回指针位置。读取大小和指针位置相符10 f.close()11 #结果:12 013 1314 abc 3

 

#操作指针...文件对象.seek(offset[,whence])
# offset:开始的偏移量,代表着需要偏移的字节数
# whence:[可选]默认值为‘0’,给offset参数一个定义,表示从那个位置开始偏移,0:文件开头 1:文件当前位置 2:文件末尾
#----注意,只有 “rt+ wt+ at+” 的打开方式可以调整指针,其他的打开方式不支持指针操作

1 def writeFile(): 2     f = open('zz1.txt','wt+',encoding='utf-8') 3     print(f.tell())         #返回初始指针位置 >>> 0 4     f.write('123')          #写入3字节内容 5     print(f.tell())         #返回当前(写入文件后的)指针位置 6     f.seek(2,0)             #指针从开头位置偏移2字节即:1 2 . 3(点的位置) 7     print(f.tell())         #返回指针位置>>>2 8     f.write('abc')          #从当前指针位置写入‘abc’(覆盖了‘3’) 9     print(f.tell())         #返回指针位置>>>510     f.close()

 

1 def readFlie(): 2     f = open('zz1.txt','rt+',encoding='utf-8') 3     r = f.read() 4     print(r) 5     f.close() 6  7 writeFile() 8 readFlie() 9 #结果:10 011 312 213 514 12abc15 '''

#二进制文件

#打开方式:rb wb ab rb+ wb+ ab+
'''
实践中总结:
 1' list内容写入文件在需要专成str格式,应为列表格式文件不接受或者采用 (f.a) 的样式;(案例综合:教材管理95-101行)

 


 

转载于:https://www.cnblogs.com/wangyuyang1016/p/10035186.html

你可能感兴趣的文章
Factory Design Pattern
查看>>
python中贪婪与非贪婪
查看>>
guava API整理
查看>>
无锁编程笔记
查看>>
jquery mobile
查看>>
如何在vue单页应用中使用百度地图
查看>>
Springboot使用步骤
查看>>
Spring属性注入
查看>>
Springboot-配置文件
查看>>
Springboot-日志框架
查看>>
SpringBoot-thymeleaf
查看>>
P1908-逆序对
查看>>
P1192-台阶问题
查看>>
一、使用pip安装Python包
查看>>
spring与quartz整合
查看>>
Kattis之旅——Eight Queens
查看>>
3.PHP 教程_PHP 语法
查看>>
Duilib扩展《01》— 双击、右键消息扩展
查看>>
利用Fiddler拦截接口请求并篡改数据
查看>>
python习题:unittest参数化-数据从文件或excel中读取
查看>>