zoukankan      html  css  js  c++  java
  • day02-文件操作

      1 文件操作。
      2 1,文件路径:d:python一定要学好.txt
      3 2,编码方式:utf-8 gbk 。。。。
      4 3,操作模式:只读,只写,追加,读写,写读..... 不论哪种方式都只能执行一次。例如r模式,只能读取一次。
      5 以什么编码方式储存的文件,就以什么编码打开进行操作。
      6 
      7 
      8 只读: r rb (b表示byte 以二进制格式打开一个文件用于只读),视频和图片rb按照字节读。
      9 f = open('d:python一定要学好.txt',mode='r',encoding='utf-8') #open(路径,操作模式,编码方式),windows的编码方式是gbk,而python是utf-8,没指定编码方式就会出现乱码。
     10 print(f.read())                                             #'d:python一定要学好.txt'是绝对路径。这个文件存放在d盘。
     11 f.close()
     12 
     13 
     14 f = open('test',mode='rb')  #'test'是相对路径(当前路径),跟正在操作的python file 是同一个目录directory。
     15  print(f.read())
     16 f.close()
     17 
     18 
     19 只写: w wb 删除所有字符,接着写入新的字符。b模式很少使用,操作图片的时候可以用到。
     20 f = open('d:python一定要学好.txt',mode='w',encoding='utf-8')
     21 f.write('专心')
     22 f.close()
     23 
     24 
     25 f = open('test',mode='wb')
     26 f.write('加油加油'.encode('utf-8'))
     27 f.close()
     28 
     29 追加 a ,ab ,a+(追加,还可以读取)
     30 f = open('d:python一定要学好.txt',mode='a',encoding='utf-8')
     31 f.write('年少不努力,老大徒伤悲')
     32 f.close()
     33 
     34 
     35 f = open('d:python一定要学好.txt',mode='ab')
     36 f.write('今天很重要'.encode('utf-8'))
     37 f.close()
     38 
     39 
     40 读写:r+ r+b 读取内容,接着写入内容,不删除原来的内容。r+使用最多。
     41 f = open('test',mode='r+',encoding='utf-8')
     42 print(f.read())
     43 f.write('年少不努力,老大徒伤悲')
     44 f.close()
     45 
     46 f = open('test',mode='r+b')
     47 print(f.read())
     48 f.write('坚持努力'.encode('utf-8'))
     49 f.close()
     50 
     51 
     52 写读:w+ w+b 删除内容,写入新的内容,接着读取新的内容
     53 f = open('test',mode='w+',encoding='utf-8')
     54 f.write('今天坚持跑步和学习')
     55 f.seek(0)    #将光标(文件指针)移动到0的位置(最左边)
     56 print(f.read())
     57 f.close()
     58 
     59 
     60 f = open('test',mode='w+',encoding='utf-8')
     61 f.write('今天坚持跑步和学习')
     62 f.seek(0)       #将光标(文件指针)移动到0的位置(最左边)
     63 f.truncate(12)  #截取12个字节,也就是截取了 今天坚持
     64 print(f.read())
     65 f.close()
     66 
     67 
     68 f = open('test',mode='w+b')
     69 f.write('今天很重要'.encode('utf-8'))   #写入的内容是str,但是读取的内容是bytes,为什么?因为open()函数把写入的内容当作str处理了
     70 f.seek(0)
     71 print(f.read())
     72 f.close()
     73 
     74 
     75 1byte = 8bits, 1byte就是一个字节,1bit是最小存储单位(存储一个0或一个1)
     76 f = open('log',mode='r+',encoding='utf-8')
     77 print(f.read(3))  #读取三个字符。一个英文字母是一个字符,一个汉字也是一个字符.
     78                    # 在utf-8中,一个英文字母使用一个字节保存,一个汉字使用三个字节保存。
     79                     另外,一个数字也是一个字节保存。一个汉字标点符号是三个字节保存。
     80 f.seek(3)     #seek(3)表示把光标移动到第三个字节后面。
     81               #那么seek(2)就会报错,因为log的内容都是汉字,如果都是英文字母就不会报错。
     82 print(f.read(3)) #read()只能读取光标后面的内容。
     83 f.close()
     84 
     85 
     86 f = open('D:Python\testpython一定要学好.txt',mode='w+',encoding='utf-8') #	是横向制表符,所以\t或T才能表示路径。
     87                                    #D:Python\test,当python和test两个目录没创建的情况下,创建python代码练习.txt文件,就会报错。
     88 f.write('123456')  #r+ 读写模式,如果先写的话,光标是从最左边开始往右边走,写入的123456(6个字节)覆盖原来的两个汉字(6个字节),后面的字符保持不变。
     89 f.seek(0)
     90 print(f.read())
     91 print(f.tell())   #tell()告诉我们光标所在位置。
     92 f.close()
     93 
     94 
     95 f = open('test01','w+',encoding='utf-8')
     96 f.write('今天很重要') #写入字符之后,光标在最右边。
     97 print(f.tell())
     98 f.seek(f.tell()-6) #光标从最后面向前移动了6个字节。
     99 print(f.read())
    100 f.close()
    101 
    102 
    103 f = open('log',mode='r+',encoding='utf-8')
    104 # print(f.readline()) #一行读取
    105 # print(f.readlines()) #多行读取,并且放在列表里面
    106 for i in f.readlines():
    107     print(i)
    108 f.close()
    109 
    110 
    111 #注册,三次登陆:
    112 username = input('注册名字:')
    113 password = input('注册密码:')
    114 print('恭喜你注册成功!')
    115 with open('注册,三次登陆','w',encoding='utf-8') as f: #with open() as f相当于f=open(),这语句可以同时打开两个文件:with open() as f,open() as f1:,并且能自动关闭文件不需要close().
    116     f.write('{}
    {}'.format(username,password))  #
    把账号和密码换行.write()的()里面只能传入一个参数,所以write(username,password)就报错。
    117 list=[]
    118 n = 0                         #循环三次的框架:n=0,while n<3,n+=1.
    119 while n < 3:
    120     username2 = input('登陆名:')
    121     password2 = input('密码:')
    122     f1 = open('注册,三次登陆','r',encoding='utf-8')
    123     for line in f1:
    124         list.append(line)
    125     if username2 == list[0].strip()  and password2 == list[1].strip(): #''.strip()删除字符串首尾空白符或
    。
    126         print('登陆成功')
    127         break
    128     else:
    129         print('账号或密码错误')
    130     n += 1
    131 
    132 
    133 #注册,三次登陆方法二 :
    134 username = input('注册名字:')
    135 password = input('注册密码:')
    136 print('恭喜你注册成功!')
    137 with open('注册,三次登陆','w',encoding='utf-8') as f:
    138     f.write('{}
    {}'.format(username,password))
    139 n = 0
    140 while n < 3:
    141     username2 = input('登陆名:')
    142     password2 = input('密码:')
    143     f1 = open('注册,三次登陆','r',encoding='utf-8')
    144     i = f1.readlines()
    145     if username2 == i[0].strip()  and password2 == i[1].strip():
    146         print('登陆成功')
    147         break
    148     else:
    149         print('账号或密码错误')
    150     n += 1
    151 
    152 
    153 #文件修改的详细步骤:
    154 #原文件替换内容,然后把原文件所有内容写入到新文件里面。
    155 with open('班长,班主任',mode='w+',encoding='utf-8') as f,open('班长,班主任.bak',mode='w+',encoding='utf-8') as f2: #打开原文件,创建新文件(原文件的备份)
    156     f.write('班长:小明
    班主任:杨老师')     #w+模式,记得seek(0)
    157     f.seek(0)                              #光标移动到0的位置,不然光标在杨老师后面,后面的内容为空,导致读取空内容。
    158     for line in f:                         #读取f的元素,所以使用W+模式。line遍历了f,line是f的任意元素。
    159         if  '杨老师' in line:
    160             line = line.replace('杨老师','金老师')  #元素line替换内容
    161         print(line)
    162         f2.write(line)                            #文件f2写入元素line的内容
    163 
    164 import os
    165 os.remove('班长,班主任')                   #删除原文件
    166 os.rename('班长,班主任.bak','班长,班主任')  #删除原文件之后,把新文件的名称修改为原文件的名称。这种操作相当于修改了原文件。
    167 
    168 
    169 文件里面把多行打印出来的两种方法:
    170 方法1:
    171 with open('test01',encoding='utf-8') as f:
    172     count = 0
    173     while count<5:            #打印5行
    174         line = f.readline()    #读取一行
    175         print(line.strip())      #每打印完一行,光标移动到该行最后的位置。下次循环,就可以打印下一行信息。
    176         count += 1
    177 方法2:
    178 def f(a):
    179     with open(a,encoding='utf-8') as f:       #f是句柄,因为f放在首位。
    180         line = f.readlines()                       #line是列表,可以使用for循环来取值
    181         for i in f:
    182             print(i.strip())
    183 f('day06-迭代器.py')
    184 
    185 处理文件,用户输入文件名和查找的内容,将内容的每一行都输出到屏幕。(生成器跟文件操作相结合)
    186 def generator(filename,aim):
    187     with open(filename,encoding='utf-8') as f:
    188         for i in f:                              # i 是 f 每一行内容。
    189             if aim in i:
    190                 yield i.strip()
    191 g = generator('day07-生成器.py','生成器')        #用户输入文件名和查找的内容。
    192 for i in g:
    193     print(i)
    194 
    195 文件操作遇到的问题:1.无法操作word。
  • 相关阅读:
    团购网站之大众点评
    cas xml
    smsUtil
    solr配置
    xml
    yu
    Schema.xml
    ApplicationContext-redis.xml
    fast
    第一版
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/10267909.html
Copyright © 2011-2022 走看看