zoukankan      html  css  js  c++  java
  • Python--文件操作(操作文件)

    文件的操作包含:读、写、修改

    文件的多种操作:

     1 # 读取文件的所有内容
     2 data = open("yesteday.txt", encoding="utf-8") .read()
     3 print(data)
     4 
     5 '''  f:文件句柄(包含这个文件的文件名,字符集,大小,在硬盘中的起始位置) '''
     6 
     7 # 'a'=append 追加
     8 f = open("yesteday2.txt", 'a', encoding="utf-8")
     9 f.write("qwerQWER1111
    ") #在文件的结尾添加内容
    10 f.close()
    11 
    12 # 'w'=write 写,覆盖之前的内容
    13 f = open("yesteday2.txt", 'w', encoding="utf-8")
    14 f.write("AAAADDDDD
    ")
    15 f.write("CCCCVVVVV
    ")
    16 f.close()
    17 
    18 #'r'=read 只读
    19 f = open("yesteday2.txt", 'r', encoding="utf-8")
    20 print(f.read())
    21 f.close()
    22 
    23 # 'r+' = r+a  读和在末尾追加
    24 f = open("yesteday.txt", 'r+', encoding='utf-8')
    25 print(f.readline())
    26 print(f.tell())
    27 f.write("---nihao---
    ")
    28 print(f.readline()) #无输出结果是因为r+写操作是写在末尾,所以光标到了末尾,读不出来东西了
    29 print(f.tell()) #tell按字符计数,返回光标的位置
    30 f.seek(0) #返回到某个位置
    31 print(f.read())
    32 f.close()
    33 
    34 # 'w+' = w+r 写和读,写还是只能追加在文件最后
    35 f = open("yesteday.txt", 'w+', encoding='utf-8')
    36 print(f.readline()) #读不到内容,因为w+会新创建一个文件,将原文件的内容清空
    37 f.write("---nihao---
    ") #写操作是写在末尾,所以光标到了末尾,读不出来东西了
    38 f.write("---oh,god---
    ")
    39 print(f.tell())
    40 f.seek(3)
    41 print(f.tell())
    42 print(f.readline()) #当光标不在一行的开头时,readline读取的内容为光标之后的部分
    43 print(f.tell())
    44 f.write("写在第一行后面") #写操作是写在末尾,即使通过调整光标的位置,也无法将这行写到第一行后面
    45 print(f.tell())
    46 f.seek(0)
    47 print(f.read())
    48 f.close()
    49 
    50 # 'a+'追加读
    51 f = open("yesteday.txt", 'a+', encoding='utf-8')
    52 print(f.read()) #读不出内容来,因为a+默认光标在结尾
    53 f.write("---nihao---
    ")
    54 print(f.tell()) #tell按字符计数,返回光标的位置
    55 f.seek(0) #返回到某个位置
    56 print(f.read())
    57 f.close()
    58 
    59 # 'rb' = 以二进制格式读文件
    60 f = open("yesteday.txt", 'rb') #不能加encoding的格式
    61 print(f.read())
    62 f.seek(0) #返回到某个位置
    63 print(f.read())
    64 f.seek(0) #返回到某个位置
    65 print(f.read())
    66 f.seek(0) #返回到某个位置
    67 print(f.readline()) #readline读一行
    68 f.close()
    69 
    70 # 'wb' = 以二进制格式写文件,会清空原文件内容
    71 f = open("yesteday.txt", 'wb') #使用wb时写时需要将字符串变为二进制格式
    72 f.write("hello binary
    ".encode()) #将hello binary变为二进制格式后写入文件
    73 f.write("hello binary
    ".encode())
    74 f.close()
    75 
    76 # 'ab' = 以二进制格式追加写文件
    77 f = open("yesteday.txt", 'ab')
    78 f.write("hello binary
    ".encode())
    79 f.close()

    有关文件的其他方法:

     1 # f = open("yesteday2.txt", 'a+', encoding="utf-8")
     2 # print(f.tell()) #光标在文件最后
     3 # print(f.read(5)) #读取不到内容
     4 # print(f.tell()) #tell按字符计数
     5 # f.seek(3)  #返回到某个位置
     6 # print(f.readline()) #当seek回到某行的中间时,下次读取一行时将cut掉前面的部分,读取后面的
     7 # f.seek(3)
     8 # print(f.tell()) #获取文件读取到的位置
     9 # print(f.encoding) #返回文件句柄的编码格式
    10 # print(f.fileno()) #返回编号--操作系统接口
    11 # print(f.seekable()) #是否可以将光标移动回去,能返回True
    12 # print(f.readable()) #判断文件是否可读
    13 # print(f.writable()) #判断文件是否可写
    14 # f.write("1111222333
    ")
    15 # f.write("1111222333
    ") #写操作会先存在内存缓存区,不是直接写到硬盘,当缓存区达到一个数值时,同时写到硬盘里
    16 # f.flush() # 强制刷新--将缓存区的内容写到硬盘
    17 # f.truncate(10) #截断 ,从指定的位置截断后面的部分,如果不写默认从头开始截断,即清空,seek移动光标没
    18 # f.close() #关闭打开的文件
    19 # print(f.closed) #判断是否关闭了

    有关文件读的示例:

     1 # 读五行
     2 f = open("yesteday2.txt", 'r', encoding="utf-8")
     3 for i in range(5):
     4     data = f.readline()
     5     print(data)
     6 f.close()
     7 
     8 # 读5个字符
     9 f = open("yesteday2.txt")
    10 print(f.tell())
    11 print(f.read(5))
    12 f.close()
    13 
    14 # 打印除了第三行的其他内容
    15 # enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
    16 f = open("yesteday2.txt", 'r', encoding="utf-8")
    17 for index,line in enumerate(f.readlines()):
    18     if index == 3:
    19         print("------")
    20         continue
    21     print(line.strip()) # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
    22 f.close()
    23 
    24 # 效率最高,读一行往内存里加一行,读下一行会把内存里的上一行覆盖掉
    25 f = open("yesteday2.txt", 'r', encoding="utf-8")
    26 count = 0
    27 for line in f:
    28     if count == 3:
    29         count += 1
    30         print("----------3-----------")
    31         continue
    32     print(line)
    33     count += 1
    34 f.close()

    通过上面的放法,实际并不能完成文件的修改,因为写入文件总是写在文件最后或覆盖掉源文件

    通过以下方式可修改文件内容:

    >>> testfile.txt
    就像一部电影原谅惨败的票房
    我走在街上闷着头游荡把心事流放
    关掉电话卸下行囊席地坐路旁
    一如乞人不需要形象
    万家灯火带领星光拼出个晚上
    绚烂的欲望涌进了街巷每个虚弱地方
    广场音箱兀自播放某个排行榜
    上榜的歌像背景一样
    那不是歌 那是孤单的歌
    这白马非马的逻辑鲜有附和
    唱着什么 故事里多少曲折
    熙来攘往中几人识得几人识得
    那不是歌 那是我写的歌
    当时的我喜或悲已经记不得
    南辕北辙 破坏热闹气氛的歌
    几人识得几人识得
    被人慌慌张张按掉了
     1 f = open("testfile", "r", encoding="utf-8")
     2 f_new = open("testfile2", "w", encoding="utf-8")
     3 
     4 for line in f:
     5     if "几人识得" in line:
     6         # '1'代表这一行只修改匹配的第一处
     7         line = line.replace("几人识得", "谁(shui)人识得", 1)
     8     f_new.write(line)
     9 f.close()
    10 f_new.close()

    为了防止进行完文件操作后,忘记关闭文件,可以使用with语法:

     1 #为了避免打开文件后忘记关闭,可以通过管理上下文,即
     2 with open("testfile", "r", encoding="utf-8") as f:
     3     for line in f:
     4         print(line)
     5 
     6 #如此方式,当with代码块执行完毕时,内部会自动关闭 并释放资源
     7 #在py2.7后,with又支持同时对多个文件的上下文进行管理,即
     8 with open("testfile", "r", encoding="utf-8") as f1,
     9         open("testfile2", "w", encoding="utf-8") as f2:
    10     print(f1.readline())
    11     f2.writable()
  • 相关阅读:
    MongoDB 创建账户
    MongoDB高可用集群配置方案
    学习CEGUI亟待解决问题一:文本控件的格式问题
    第一讲
    ERP初阶(三):MRP基本原理
    ERP初阶(四):MRP基本构成
    学习CEGUI亟待解决问题二:消息事件传递机制问题
    Groovy处理null对象为空字符串
    silverlight与CSLA的快速应用05安装CslaExtension
    silverlight与CSLA的快速应用08客户端的CSLA代码
  • 原文地址:https://www.cnblogs.com/sunnytomorrow/p/12945204.html
Copyright © 2011-2022 走看看