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

    文件操作

    f = open() # f: 学名:文件操作符 或 文件句柄 或者 文件操作对象# 习惯叫 f file f_obj f_handler fh
    --------------------
    f = open('file','w',encoding= ‘utf-8’)
    #open打开文件是依赖了操作系统提供的途径
    #操作系统有自己的编码,open在打开文件的时候默认使用操作系统的编码
    #win系统 gbk mac、Linux系统 utf-8
    mac, linux,打开python文件,默认utf-8,而python 3 默认是utf-8 所以用mac、Linux。系统的人 不用encoding='utf-8'
    win系统打开python文件,默认gbk,而python 3 默认是utf-8,所以需要encoding='utf-8'

    例如:我们用pycharm 编写代码的时候,默认使用utf-8方式编写内容,所以要先把打开的文件转换成utf-8格式,保证打开
    的文件类型变成utf-8,和你将要以哪种(utf-8)保持一致,才行
    例子,一篇文章,如果全是英语 ,你再往里面输入英文 英译汉 可以直接变成汉语
    一篇文章,如果全是英语,你再往里面输入日语, 英译汉 就会出错

    ***只要写入的类型和打开的类型一致,不管什么操作系统都不会出错
    -----------------

    r w a r+ w+ a+ b rb wb ab

    f.readable() #判断文件是否可读

    f.writable() #判断文件是否可写

    f.write('int') #write() 写入的date 全是str (打开文件的同时,文件被清空)
    write()如果文件不存在,那么不存在的文件会被创建
    ----------

    找到文件:
    绝对路径: 文件路径要用取消转译的方式来表示(两种方法): 1. \ 2.r'path'
    相对路径: 文件和py的 执行文件 在相同路径下,直接用文件的名字就可以
    ----------------------

    f.close() 关闭文件 (操作系统级别的关闭)
    del f 主动的释放了一个python程序内存中的变量
    (解释器会主动回收,所以可写可不写(例如:定义a = 1,b = 2,程序后面不用,解释器会主动回收,不过回收是需要时间的))
    -------------------

    f.read() 一次性读出文件的所有内容, r 是按字符读, rb 按字节读

    f.read(n) 一次读n个字符

    f.readline() 一次读一行,每次执行readline就会往下读一行 *** 不能直接读第二行
    print()本身就带换行符,而文件每行末尾也有换行符,就会造成输出一行字符一行空,一行字符一行空。。。
    print(1) ---------1
    print('1 ')------1
    所以加.strip(),把每行末尾的换行符去掉 (strip 能去掉空格、制表符、换行符)
    content = f.readline()
    print(content.strip())
    content = f.readline()
    print(content.strip())

    f.readlines() 返回一个列表,将文件中的每一行作为列表的一个元素
    readlines有一个问题,如果文件有4g ,你的电脑4g内存就爆了

    for line i f: 一次拿一行到内存 释放掉上一行
    print(line.strip())
    -----------

     1 'name' 文件内容
     2 apple 10 3
     3 tesla 100000 
     4 mac 3000 2
     5 lenovo 30000 3
     6 chicken 10 3
     7 phone 3 3000
     8 
     9 程序:
    10 f = open('name','r',encoding='utf-8')
    11 dic = {}
    12 shop_list = []
    13 for i in f:
    14 if line.strip(): 有空行的话,line.strip()就是 '' 空,空的bool值就是False,不执行
    15 dic1 = {'name':None,'price':None}
    16 li = i.split()
    17 dic1['name'] = li[0]
    18 dic1['price'] = li[1:]
    19 shop_list.append(dic1)
    20 print(shop_list)
    21 f.close()

    -------------------

    f = open('file','a',encoding= 'utf-8') 之追写模式 (从文件末尾写入)
    追写模式
    --------
    r + 可读可写
    1.先读后写: 写是追写 (不管你读几个字符,文件指针都会移到文件末尾)
    2.先写后读:从头开始写 (会造成乱码)
    w + 可写可读
    一上来文件就清空了,读出的内容是打开文件后新写入的
    a + 之追加可读
    -------

    f = open('file','rb') 以二进制模式打开 并且不需要指定编码了 (不需要encodin='')
    (处理 视频 图片 等非文字文件 )
    --------------------
    f = open('name','r',encoding='utf-8')
    a = f.read(3) #把读取的值赋值给变量a
    f.close()
    print(a) #文件已经关闭,但仍然可以使用变量啊a
    ------------

    tell() 查看当前指针位置

    seek(0) 把指针定位到文件开头
    seek(0,2) 把指针定位到文件末尾

    truncate(n) 截取从开头到n个字符(0--n),n以后的全部删掉
    必须是写入模式 ‘r+’ ‘a’ ‘a+’ ‘w’ ‘w+’ 也就是除了'r'模式
    ----------------

    文件的修改

     1 name文件
     2 aaaaaaa
     3 bbbbbbb
     4 cccccccc
     5 
     6 f = open('name','r',encoding='utf-8') 以 r 模式打开name文件
     7 f1 = open('name1','w',encoding='utf-8') 以 w 模式创建 name1 文件
     8 for line in f:
     9 line = line.replace('a','x') 把‘a' 替换成 x
    10 f1.write(line) 把修改后的字符串写入name1
    11 f.close()
    12 f1.close()
    13 import os os模块
    14 os.remove('name') 删除name文件
    15 os.rename('name1','name') 把name1 文件改成原name文件
    16 
    17 name文件
    18 xxxxxxxx
    19 bbbbbbb
    20 xxxxxxxx
    21 文件不能直接修改,可以把修改的内容存在另一个文件,把原文件删除,然后另一个文件改名字,间接完成修改
    22 -----------------
    23 
    24 with 可以不用关闭文件
    25 name文件
    26 xxxxxxxx
    27 bbbbbbb
    28 xxxxxxxx
    29 
    30 with open('name','r',encoding='utf-8') as f,
    31 open('name1','w',encoding='utf-8') as f1:
    32 for line in f:
    33 line = line.replace('x','a')
    34 f1.write(line)
    35 import os
    36 os.remove('name')
    37 os.rename('name1','name')
    38 
    39 name文件
    40 aaaaaaa
    41 bbbbbbb
    42 cccccccc

    -----------------------

  • 相关阅读:
    [禅悟人生]如春风般吹开他人冬眠的良心
    [禅悟人生]先学做人, 再学做佛
    [禅悟人生]悟得自性则天地开阔
    [禅悟人生]"执著"是自缚的茧
    [禅悟人生]时常自省, 扫却心中尘埃
    [禅悟人生]心不动才能真正认清自己
    [禅悟人生]自卑裹足不前, 就无法成就自己
    [禅悟人生]有自知之明, 在深浅之间权衡做人
    禅悟人生目录
    [禅悟人生]认识自己才能了解外部世界
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/7762185.html
Copyright © 2011-2022 走看看