zoukankan      html  css  js  c++  java
  • 文件处理

    文件处理

    1,打开文件

    open('文件名',encoding='utf8') 此处看文档在电脑是用什么编码存储的,如果是gbk,那么此处encoding = 'gbk;若是utf8,那么encoding = 'utf8'

    例如:

    打开文档:新闻

    f = open('新闻',encoding= 'utf8')
    data = f.read()
    print(data)===>结果是:文档新闻的所有内容

    关闭: f.close()

    2,文件读取

    r 可读模式

    -readable判断是否可读

    f = open('新闻','r',encoding= 'utf8')  'r' 代表可读 ‘w'代表可写
    print(f.readable())====》True

    -readline 一行一行读取

    f = open('新闻','r',encoding= 'utf8')
    print('第1行', f.readline())=======》第1行 1111111111111

    print('第2行', f.readline())=======第2行 222222222222

    print('第3行', f.readline())=======第3行 3333333333

    其中发现结果中间会空一行,消除空行,需要在最后加上end=''

    print('第1行', f.readline(),end= '')

    -readlines 全部读取并用列表表示出来

    f = open('新闻','r',encoding= 'utf8')
    print(f.readlines())======》['1111111111111 ', '222222222222 ', '3333333333']

    3,文件写

    w 可写模式

    如果文件只可写:

    -文件存在,会把文件内容清空,然后可写

    -文件不存在,新建文件然后可写

    f = open('新闻','w',encoding= 'utf8')

    -write 默认不换行,如果需要换行需要自己输入换行( )

    f = open('新闻','w',encoding= 'utf8')
    f.write('你')
    f.write('好')
    f.write('吗')
    查看文件,发现内容是‘你好吗’
    若需换行,需写为:
    f.write('你
    ')
    f.write('好 ')
    f.write('吗 ')
    其结果是:


    -writable 是否可写

    f = open('新闻','w',encoding= 'utf8')
    print(f.writable())===》True

    -writelines 写入列表,只能写字符串类型,不能是其他类型

    f = open('新闻','w',encoding= 'utf8')
    f.writelines(['111 ','222 ','我的'])
    运行后,文档内容:
    111
    222
    我的

    将一个文件内容添加到另一个文件中

    例如:将新闻文档中内容全部加到新闻new文档中,代码如下:

    方法一:

    f = open('新闻','r',encoding= 'utf8')
    data_f = f.read()
    f.close()

    d = open("新闻new",'w',encoding='utf8')
    d.write(data_f)
    d.close()

    **********************************

    方法二:
    with open('新闻','r',encoding= 'utf8') as f,
    open('新闻file','w',encoding= 'utf8') as d :
    data = f.read()
    d.write(data)

    4,文件追加操作

     a 追加模式

    f = open('新闻','a',encoding= 'utf8') a 代表追加写
    f.write('你')====》会在文章最后追加上你

    5,关闭文件

    - 手动关闭 x.close()

    -系统自动关闭:

    with open(‘文件名’,可读/可写读/可写) as x:

      操作

    6,可读可写模式

    1)r+ 读写

    2) w+ 写读

    3) x+ 写读

    4) a+ 写读

    7,b模式(rb,wb,ab)

    - rb 此处的b代表位,意味着是以二进制的方式存储在硬盘中。所以带b的方式不能指定编码

    f = open('1', 'rb' )
    d=f.read()
    print(d)======》结果是:b'xe4xbdxa0xe5xa5xbdxe5x95x8a'
    print(d.decode('utf-8'))====》代表着是将其内容从二进制的方式编程utf-8的形式输出结果是;你好啊
    字符串------encode------二进制byte
    byte------decode------字符串

     -ab 也是不能指定编码

    -wb

    rb模式:以字节(二进制)方式读取文件中的数据
    wb模式: 以字节(二进制)方式往文件中写入数据
    ab模式: 以字节(二进制)方式往文件末尾追加写入数据

     8,文件的其他处理方式

    newline = ''--------------代表读取真正的换行符号

    seek 控制光标的位置  ----读字节

    seek(x, b) 

    -b 默认0,代表从开头开始算

    f = open('我1', 'r',encoding= 'utf-8', newline='')
    print(f.tell())===》刚开始,所以结果是0
    f.seek(10)====》光标定位在10的字节上
    print(f.tell())===》光标位置是:10
    f.seek(3)====》定位在位置是3的字节上
    print(f.tell())===》光标的位置是3

    - b 是 1 的时候,代表相对位置。此时必须在b的模式下运行

    f = open('我1', 'rb')
    print(f.tell())
    f.seek(10)
    print(f.tell())======>10
    f.seek(4,1)
    print(f.tell())=======>14 因为是相对位置,10+4=14

    -b 是2的时候,代表从倒数开始计算,此时必须在b的模式下运行

    f = open('我1', 'rb')
    print(f.tell())====0
    f.seek(-5,2)
    print(f.tell())====因为之前定位倒数第五个字节,因此正数位置是17
    print(f.read())====》从光标所在位置开始读取因此结果是:b'123 '

    tell 光标所在位置------读字节

    read -------读字符

    truncate(x)----截取文章内容(从开头到截取的x位置)读取的是字节,它除了w模式下不行,其他模式下都可以运行。

    我1 文件内容第一行是:你好,第二行是:hello  utf-8 一个中文字代表3个字节
    f = open('我1', 'r',encoding= 'utf-8', newline='')
    print(f.readlines())===windows系统显示文件所有内容['你好 ', 'hello']
    print(f.tell())======>光标所在位置 13
    print(f.seek(7))======》指定光标所在位置
    *****************************
    f = open('我1', 'r',encoding= 'utf-8', newline='')
    print(f.read(1))=====>结果是:你

    ********************************** 

    f = open('我1', 'r+',encoding= 'utf-8', newline='')
    print(f.truncate(7))======>结果是:文章内容会变成:你好

     查找文件最后一行的内容操作如下:

    方法一: 太占内存

    f = open('我1', 'rb')
    data = f.readlines()====》此处相当于把文档所有内容加载在内存中,以列表形式存储,每一行为列表的一个元素。
    print(data[-1].decode('utf-8'))===》最后一行内容:nihaihaomadoushishenmm

     方法二:简单不占内存

    f = open('我1', 'rb')
    for i in f:
    offs = -10 ========》此处设置一个变量,预估每行是10个字节
    while True:
    f.seek(offs,2)====》光标倒数定位
    data = f.readlines()
    if len(data) > 1:
    print('文件的最后一行是:%s'% (data[-1].decode('utf-8')))===》文件的最后一行是:nihaihaomadoushishenmm
    break
    else:
    offs*=2

     9,对文件进行增删改查

     参考装饰器中例子:对文件进行增删改查

     
    
    
  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/wode110/p/14601826.html
Copyright © 2011-2022 走看看