zoukankan      html  css  js  c++  java
  • 文件读写,文件修改,文件指针

      1 两种打开文件的方式
      2             # file('a.txt','')#在python2里面
      3             # open('a.txt')
      4 
      5 #r read  只能读不能写,文件不存在的时候会报错
      6 #w write 文件不存在的话,帮你创建,不能读,会清空原来的文件内容
      7 #a 追加模式 文件不存在的话,帮你创建,不会清空原来文件的内容,但是不能读
      8 
      9 f = open('users.txt','r',encoding='utf-8')
     10 # res = f.read()    #只能读
     11 # print(res)
     12 
     13 f.write('abc')    #不能写
     14 运行结果:io.UnsupportedOperation: not writable    #【报错】
     15 
     16 f = open('users1.txt','r',encoding='utf-8')
     17 运行结果:FileNotFoundError: [Errno 2] No such file or directory: 'users1.txt'   
     18                   #【报错】
     19 
     20 f = open('users2.txt','w',encoding='utf-8')
     21 f.write('abc')  #可以写
     22 f.read()     #不能读
     23 运行结果:io.UnsupportedOperation: not readable  #【报错】
     24 
     25 f = open('users2.txt','a',encoding='utf-8')
     26 f.write('今天是周二')   #可以写
     27 res = f.read() #不能读
     28 print(res)
     29 运行结果:io.UnsupportedOperation: not readable  #【报错】
     30 
     31 =============================================================================
     32 
     33 #r+ 读写模式 文件不存在的时候会报错,可以写,但是写的有问题?
     34 #w+ 写读模式 文件不存在的时候会创建,会清空原来的文件内容,可以读
     35 #a+  追加读模式,能写能读,读不到东西
     36 
     37 #记住:只要有r 文件不存在的时候都报错
     38 #     只要有w 文件内容都会被清空
     39 
     40 #分别试
     41 #  1.文件不存在的时候会不会创建
     42 #  2.都能不能读写
     43 #  3.能不能读到东西
     44 
     45 f = open('users.txt','r+',encoding='utf-8') #不存在的文件不能被创建  #【报错】
     46 res = f.read() #可以读
     47 print(res)
     48 f.write('hahahah') #可以写
     49 
     50 f = open('a.txt','w+',encoding='utf-8') #不存在的文件帮你创建
     51 f.write('bacdf') #可以写入
     52 res = f.read()  #可以读,但是由于w+模式会清空,导致总是什么都都不出来
     53 print(res)
     54 
     55 f = open('b.txt','a+',encoding='utf-8') #不存在的文件帮你创建
     56 f.write('dfadf') #可以写入
     57 res = f.read()  #可以读,但是读不到东西,内容没有被清空
     58 #ps:读不到东西是因为a+模式进来指针就在内容最后
     59 print(res)
     60 
     61 =============================================================================
     62 #文件指针
     63 
     64 f = open('b.txt',encoding='utf-8') #默认是r模式
     65 # print(f.read()) #读取文件里面所有的内容,返回所有内容是字符串
     66 # print(f.readline()) #读取一行的内容
     67 print(f.readlines()) ##返回的是列表,一行是一个元素
     68 返回结果:['dfadf
    ', 'hahah
    ', '哈哈哈
    ', 'python
    ', 'ddsfs']
     69 
     70 print('read',f.read())
     71 print('readlines',f.readlines())
     72 返回结果:read dfadf
     73                   hahah
     74                   哈哈哈
     75                   python
     76                   ddsfs
     77                   readlines []
     78 
     79 print('readlines',f.readlines())
     80 print('read',f.read())
     81 返回结果:readlines ['dfadf
    ', 'hahah
    ', '哈哈哈
    ', 'python
    ', 'ddsfs']
     82                   read
     83 注:之所以 第二行的代码都读不到内容,是因为在第一行代码读取所有内容后,文件指针就到了内容最后,所以第二行代码再去读文件的时候,就什么都都不出来
     84 
     85 
     86 
     87 
     88 f = open('b.txt','r+',encoding='utf-8')
     89 f.write('ggg')
     90 运行结果:如下
     91 文件内容:
     92 
     93 
     94  ps:是因为r+模式进来指针就再最前面
     95 
     96 ============================================================================
     97 
     98 f = open('b.txt','a+',encoding='utf-8')
     99 l = ['123','346','rdsf']   #列表写入文件,只能用循环,因为write只能写入字符串
    100 for i in l:
    101     f.write(i+'
    ')
    102 
    103 f = open('b.txt','a+',encoding='utf-8')
    104 l = ['123
    ','346
    ','rdsf
    ']
    105 f.writelines(l) #传一个list,把list里面的每一个元素写入文件
    106 
    107 f = open('b.txt','a+',encoding='utf-8')
    108 f.seek(0) 
    109 f.truncate()#从文件指针的位置删除内容
    110 运行结果:文件里面的内容都被清空
    111 
    112 f = open('b.txt','a+',encoding='utf-8')
    113 f.seek(0)
    114 print(f.tell())#当前文件指针的位置
    115 f.readline()
    116 print(f.tell())
    117 
    118 f = open('a.txt')   #第一种打开文件方法,需要去关闭
    119 f.close()
    120 
    121 with open('a.txt') as f:
    122     f.read()
    123 #这两种打开文件的方法都可以,第二种with open方法不需要手动去关闭文件
    124 
    125 with open('a.txt') as f,with open('b.txt') as f1:可以同时打开多个文件
    126 
    127 =============================================================================
    128 
    129 with open('users.txt',encoding='utf-8') as f:
    130     for line in f:
    131         print('每次循环的内容是',line)
    132 
    133 #文件循环 展示的是 一行一行的内容
    • 文件修改
     1 文件内容:
     2 bacdfs
     3 dfsdf
     4 gfdhbhes
     5 sdfgrth
     6 cdftrys
     7 jytufs
     8 hdhyus
     9 
    10 :把文件中的小写的s修改成大写的S
    11 
    12  f = open('a.txt','a+')
    13 f.seek(0)
    14 res = f.read().replace('s','S')#替换完是新的需要重新写入
    15 f.seek(0)
    16 f.truncate()
    17 f.write(res)
    18 
    19 #1.简单直接粗暴的  替换完删除旧的写入新的
    20     #1 先读取到所有的内容,修改
    21     #2 然后清空原有文件所有内容,在写入新的   
    22 
    23 =========================================================================
    24 文件内容:xiaohei,80,91,100,90
    25 xiaohei,80,93,100,91
    26 xiaohei,80,90,100,90
    27 xiaohei,80,93,100,91
    28 xiaohei,80,90,100,90
    29 xiaohei,80,94,100,91
    30 xiaohei,80,90,100,90
    31 xiaohei,80,90,100,90
    32 xiaohei,80,94,100,91
    33 
    34 :求平均值,并且把平均值展示到最后一列
    35 f = open('account.txt','a+')
    36 f.seek(0)
    37 l = []
    38 for line in f:
    39     line = line.strip()
    40     line_list = line.split(',')
    41     sum = int(line_list[1])+int(line_list[2])+int(line_list[3])
    42     avg = sum//3  #两个//就能使平均数去掉小数点展示整数
    43     new_line = '%s,%s
    '%(line,avg)
    44     # print('new_line',new_line)
    45     l.append(new_line)
    46 f.seek(0)
    47 f.truncate()
    48 f.writelines(l)
    49 
    50 #2.高效的方式
    51   # 打开2个文件
    52   # 只负责读
    53 
    54 import os
    55 with open('account.txt') as f,open('account2.txt','w') as fw:
    56     for line in f:
    57         line = line.strip()
    58         line_list = line.split(',')
    59         sum = int(line_list[1])+int(line_list[2])+int(line_list[3])
    60         avg = sum//3  #两个//就能使平均数去掉小数点展示整数
    61         new_line = '%s,%s
    '%(line,avg)
    62         fw.write(new_line)
    63         fw.flush()#立即写入文件
    64     os.remove('account.txt')
    65     os.rename('account2','account.txt')
  • 相关阅读:
    从头到尾彻底理解KMP
    [CF1220E] Tourism
    [CF446C] DZY Loves Fibonacci Numbers
    [CF1003E] Tree Constructing
    [CF1238E] Keyboard Purchase
    [CF915E] Physical Education Lessons
    [CF788B] Weird journey
    [CF1371E2] Asterism (Hard Version)
    [CF780E] Underground Lab
    [CF372C] Watching Fireworks is Fun
  • 原文地址:https://www.cnblogs.com/baiby/p/10737435.html
Copyright © 2011-2022 走看看