zoukankan      html  css  js  c++  java
  • python_文件的打开和关闭



    文件对象 = 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('
    more')    #写函数
    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             break
    13         i = i+1
    14     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
    I am Code_boy
    Mirror_")  #三行数据(两个
    )
     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 world
    21 I am Code_boy
    22 Mirror_
    23 '''



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

     1 def writeFile():
     2     f = open('readline.txt','wt')
     3     f.write('Hello
    world')
     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
    world 结合readline的功能,在读取一行的数据
    24  len= 6         # ‘Hello
    ’ >>>> 共计6个字节(换行是因为读取了
    )
    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
    world')
     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)   #读全部内容,并且每一行用'
    '(显示)隔开    #2号:直接输出
    14     f.close()
    15 
    16 try:
    17     writeFile()
    18     readlinesFile()
    19 except Exception as error:
    20     print(error)
    21 '''
    22 1号结果:
    23 Hello
    24 world
    25    2号结果:
    26 ['Hello
    ', 'world']        #>>>也就是readlinese()读取数据的储存(list)形式
    27 '''



    #读取文件中的学生信息

     1 f = open('student1.txt','rt')
     2 while True:
     3 
     4     name = f.readline().strip('
    ')# *.strip()>>用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
     5     if name == '':
     6         break
     7     gender = f.readline().strip('
    ')
     8     age = f.readline().strip('
    ')
     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 0
    13 13
    14 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())         #返回指针位置>>>5
    10     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 0
    11 3
    12 2
    13 5
    14 12abc
    15 '''

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


  • 相关阅读:
    寒假自学进度十四
    2020.2.14
    2020.2.13
    寒假自学进度十三
    2020.2.12
    软件架构实践阅读笔记1
    一线架构师实践指南阅读笔记03
    一线架构师实践指南阅读笔记02
    python作业5
    一线架构师实践指南Refined Architecture阶段阅读笔记
  • 原文地址:https://www.cnblogs.com/wangyuyang1016/p/10035186.html
Copyright © 2011-2022 走看看