zoukankan      html  css  js  c++  java
  • python——文件管理

     文件操作分为读、写、修改

    一、读文件

    f = open(file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt',mode='r',encoding='utf-8')
    
    data = f.read()  # 表示读取所有内容,内容是已经转换完毕的字符串。
    f.close()  # 表示关闭文件
    

    file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt' 表示文件路径

    mode='r'  表示读取模式。有r,rb模式,在这两种模式下,只能读,不能写。rb表示以二进制模式读取文件,直接以bytes格式将数据读到内存,如果想查看内容,还需要手动decode,因此在文件打开阶段,不需要指定编码

    encoding='utf-8'  表示以何种编码规则读文件。此处的encoding必须和文件在保存时设置的编码相一致,不然“断句”会不准确从而造成乱码。

    假如你不知道你要处理的文件是什么编码可怎么办呢?

    安装第三方工具:pip install chardet

    import chardet
    
    f = open('log',mode='rb')
    data = f.read()
    f.close()
    
    result = chardet.detect(data)
    print(result)
    

     输出:

    {'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
    

    可以看出该文件是以GB2312编码的。

    文件循环:

    f = open("兼职白领学生空姐模特护士联系方式.txt",'r',encoding="utf-8")
    
    for line in f:
        print(line)
    
    f.close()
    

     二、写文件

    f = open(file='D:/工作日常/兼职白领学生空姐模特护士联系方式.txt',mode='w',encoding='utf-8') # 打开文件
    f.write('Jack 22 IT 134222xxxx')  # 写入内容
    f.close()
    

     写模式包括w,wb,只能写,不能读。在写入内容之前,如果文件不存在,将自动 创建一个新文件,如果文件存在,将清空文件,再写入新内容。wb表示以二进制的模式写入文件。

    三、追加(a,ab)

    一种不清空文件,默认将内容追加到文件尾部的方式。有a,ab两种模式。

    f = open("兼职白领学生空姐模特护士联系方式.txt",'a',encoding="gbk")
    f.write("
    杜姗姗 北京  167 49 13324523342")
    f.close()
    

     四、读写模式(r+)

    既可以读又可以写,默认将内容追加到文件尾部。

    f = open("兼职白领学生空姐模特护士联系方式.txt",'r+',encoding="gbk")
    data = f.read() #可以读内容 
    print(data)
    f.write("
    black girl  河北  167 50  13542342233") #可以写
    f.close()
    

    五、写读模式(w+)

    先写后读,在写之前会将文件清空,若不存在改文件,会自动创建文件,与w相比只是多了一个读的功能。

    f = open("兼职白领学生空姐模特护士联系方式.txt",'w+',encoding="gbk")
    data = f.read() 
    print(data)
    
    f.write("
    newline 1哈哈")
    f.write("
    newline 2哈哈")
    
    print("content",f.read())
    
    f.close()
    

     六、文件其他常用操作

    fileno():返回文件句柄在内核中的索引值

    flush():把文件从内存里强制刷新到硬盘上

    readable():判断是否可读

    writable():判断是否可写

    readline():只读一行,遇到 或者 为止  返回一个字符串格式

    readlines():读取所有行  返回一个列表,列表元素是每行的内容

    seek():把操作文件的光标移到指定位置,seek的长度是按字节计算的。

    tell():返回当前文件操作光标的位置,按字节计算

    truncate():按指定长度截断文件(指定长度的话,就从指定位置开始删掉之后内容,不指定长度就从当前位置到文件尾部的内容全部删除)

    f = open("test_file", "r+", encoding="utf-8")
    print(f.tell())
    f.seek(27)  # 将光标移到第27个字节的位置
    f.truncate()  # 截掉第27个字节之后的内容
    f.close()
    

     七、文件修改

    # 将名为“李云”的用户修改为“张山”
    f_old = open("mail_list", "r", encoding="utf-8")
    f_new = open("mail_list_new", "w", encoding="utf-8")  # 创建一个新文件
    old_str = "李云"
    new_str = "张山"
    for line in f_old:
        if old_str in line:
            new_line = line.replace(old_str, new_str)  # 替换
        else:
            new_line = line
        f_new.write(new_line)  # 写入新的内容
    f_new.close()
    f_old.close()
    View Code

    此法,是新建一个新文件的方式,边从旧文件读内容,然后修改,然后再写入新文件。
    上面的代码,会生成一个修改后的新文件 ,原文件不动,若想覆盖原文件,将新文件名替换掉旧文件名就行:

    # 将名为“李云”的用户修改为“张山”
    import os
    f_old = open("mail_list", "r", encoding="utf-8")
    f_new = open("mail_list_new", "w", encoding="utf-8")  # 创建一个新文件
    old_str = "李云"
    new_str = "张山"
    for line in f_old:
        if old_str in line:
            new_line = line.replace(old_str, new_str)  # 替换
        else:
            new_line = line
        f_new.write(new_line)  # 写入新的内容
    f_new.close()
    f_old.close()
    os.replace("mail_list_new", "mail_list")  # 新文件名改为旧文件名
    View Code
  • 相关阅读:
    面向对象 委托
    面向对象 继承 接口
    C# 面向对象 , 类与对象
    C# 知识点回顾
    SQL 数据库知识点回顾
    C# 10 总复习
    spring boot jpa 表关联查询分组 group by 去重
    钉钉新增考勤组 设置考勤规则
    elasticsearch 学习之父子关联查询 parent/child
    Elasticsearch 查询学习
  • 原文地址:https://www.cnblogs.com/yanlin-10/p/9011391.html
Copyright © 2011-2022 走看看