• 文件处理


    文件处理

    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,对文件进行增删改查

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

     
    
    
  • 相关阅读:
    两个链表的第一个公共节点(Python and C++解法)
    第一个只出现一次的字符(Python and C++解法)
    丑数(Python and C++解法)
    最长不含重复字符的子字符串(Python and C++解法)
    礼物的最大值(Python and C++解法)
    把数字翻译成字符串(Python and C++解法)
    连续子数组的最大和(Python and C++解法)
    最小的k个数(Python and C++解法)
    数组中出现次数超过一半的数字(Python and C++解法)
    字符串的排列(Python and C++解法)
  • 原文地址:https://www.cnblogs.com/wode110/p/14601826.html
Copyright © 2020-2023  润新知