• Python文件处理相关操作



    1、file文件操作

    # open()函数用于创建文件对象,基本语法格式如下:
    open(文件名[打开方式])
    如果只是文件名,代表在当前的目录下的文件。文件名可以录入全路径,比如:”D:\a\b.txt 为了减少"\" 的输入,可以使用原始字符串:r"d:\b.txt" 具体示例如下
    f = open (r"d:\b.txt","w")
    打开方式有如下几种:
    r: 读read 模式
    w:写write 模式。如果文件不存在则创建,如果文件存在,则重写内容
    a:追加append模式。如果文件不存在则创建文件;如果文件存在,则在文件末尾追加内容
    b:二进制binary模式(可与其他模式组合使用)  如果没有模式b 则创建文本文件对象 处理基本单位是”字符“     ;如果有二进制模式b 则创建的是二进制文件对象, 处理的基本单位是”字节“
    +:读写模式(可与其他模式组合使用)

    如下代码:

    我们在当前工作目录下使用一个a.txt文件(如没有a.txt文件则创建a.txt) 使用的是a 模式 ,即追加

    到文件末尾

    1. f = open(r"a.txt",'a')
    2. s = '20230829'
    3. f.write(s) #f.write 作用是将字符串s的内容写入a.txt文件中
    4. f.close() #使用此方法需要用close释放掉资源

    还可以用with open 方法操作文件 好处是不需要手动释放资源 既不需要f.close()操作

    具体代码如下

    1. with open(r"a.txt","a") as f:
    2. s = "itbaizhan\next\n"
    3. f.write(s)

    2.编码知识

    ASCII : 7位表示一个字符 最高位为0 只能表示128个字符
    ISO8859-1: 8位表示1个字符,能表示256个字符,兼容ASCII
    GB2312: 主要用于汉字处理,GB2312主要收录了6763个汉字,682个符号
    GBK:    于1995年指定,扩展了GB2312 收录了21003个汉字     eg:windows 使用open()函数时默认的编码是GBK
    GB18030: 强制执行 向下兼容GBK和GB2312 收录70000余字
    Unicode:定长编码,2个字节表示1个字符  所有字符都用16位来表示 所以(2**16= 65536) 不兼容其他编码
    UTF-8: 变长编码:1-4个字节表示一个字符;英文1个字节,汉字3个字节 eg: linux
    如下代码用两中方式插入代码 使用encoding='utf-8'指定编码 ,如不指定在编译之后的b.txt内容打开是乱码,乱码的原因是python默认的编码为GBK,所以我们要指定为utf-8编辑中文
    1. #测试写入中文
    2. # f = open(r"b.txt",'a',encoding='utf-8')
    3. # f.write("尚学堂\n百战程序员\n")
    4. # f.close()
    5. with open(r"c.txt","w",encoding='utf-8') as f:
    6. s = ['京东\n', '百度', '头条']
    7. f.writelines(s)

    pycharm错误示例截图

    在文件后追加以urf-8编码的中文后

    3、关闭流要点

    为了确保打开的文件对象能够正常关闭,我们可以使用异常机制的finally或者with关键字实现无论出现何种情况都能关闭打开文件对象。

    1. # close()关闭文件流
    2. try:
    3. f = open("b.txt",'w')
    4. s = 'gapqo'
    5. f.write(s)
    6. except BaseException as e:
    7. print(e)
    8. finally:
    9. f.close()
    10. # with 关闭流 with函数的原理统try except finally 一样
    11. with open(r"c.txt","w",encoding='utf-8') as f:
    12. s = ['京东\n', '百度', '头条']
    13. f.writelines(s)

    4、文本文件的读取
     

    1. """
    2. 文本文件的读取
    3. read(size)
    4. 从文件中读取size个字符 如果没有写size 参数 则读取整个文件 读取到文件末尾 返回空字符串
    5. readline()
    6. 读取一行内容作为结果返回
    7. readlines()
    8. 读取每一行 结果返回为列表
    9. """
    10. with open(r"b.txt","r",encoding='utf-8') as f:
    11. s= f.read(2) #size=2 即读取文本对象前两个字符
    12. print(s)
    13. m=f.readline() # 在read(2)之后文件会读取第一行初前两个字符后所有字符
    14. print("读取readline结果:{0}".format(m))
    15. s=f.readlines() #返回[]对象
    16. print("读取结果为:",s)
    17. # for line in f: #读取的结果同 read()类似
    18. # print(line)
    19. # while True:
    20. #line = f.readline()
    21. #if not line: #如果读不到东西了 line =0 not line=1 就退出循环
    22. # break
    23. #else:
    24. # print(line,end='')

    5、二进制文件的读取和写入

    """
    二进制的文本文件流程与正常文本文件流程一致
    创建二进制文件 需要创建加b
    例如 ”wb“ 可写的、可重写的二进制文件对象
    ”ab“ 可写的、追加模式的二进制文件对象
    ”rb“ 可读的二进制文件对象
    """
    代码将会拷贝baidu.png 生成dcp.png文件 在此目录下生成.png图片
    
    
    
    1. with open(r"baidu.png",'rb') as SrcFile, open("dcp.png",'wb') as destFile:
    2. for line in SrcFile:
    3. destFile.write(line)

    6、文件对象常用属性和方法

    1. """
    2. 文件对象的属性
    3. name:返回文件的名字
    4. mode:返回文件的打开模式
    5. closed:若文件被关闭,返回True
    6. 打开模式: r w a b +
    7. 文件对象的常用方法
    8. write(str) 将字符串str内容写入文件
    9. writelines(s) 将字符串列表s写入文件,不添加换行符
    10. seek (m,n) 把文件指针移动到新的位置 相对于n 偏移m个单位 开始 n为0 从文件头开始计算 1从当前位置开始计算 2从文件尾开始计算
    11. tell () 返回文件指针位置
    12. truncate(size) 不论指针在什么位置,只留下前size个字符,其余全部删除,如果没有传入size ,则从指针当前位置到文件末尾全部删除
    13. flush() 把缓冲区的内容写入文件,但不关闭文件
    14. close() 把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源
    15. """
    16. with open("a.txt","r") as f :
    17. print("文件名是:{0}".format(f.name))
    18. print(f.tell())
    19. print("读取的内容:{0}".format(str(f.readline())))
    20. print(f.tell())
    21. f.seek(2, 0)
    22. print("读取的内容:{0}".format(str(f.readline())))

    7、pickle实现序列化

    1. # 序列化是指: 将对象转化为“串行化”数据形式,存储到硬盘或用过网络传输到其他地方
    2. """
    3. pickle.dump(obj,file) obj 是要被序列化的对象, file 是存储的文件
    4. pickle。load(file) 从file 读取数据, 反序列化成对象
    5. """
    6. import pickle
    7. with open("a.dat",'wb') as f:
    8. name = "高淇"
    9. age = '18'
    10. score = [70,80,90]
    11. resume = {'name':name,'age':age, 'score':score}
    12. pickle.dump(resume, f)
    13. with open("a.dat",'rb') as f:
    14. resume2 = pickle.load(f)
    15. print(resume2)

    8、csv文件处理

    csv格式文件用于导出excel数据或者导出数据库数据  是python内置包

    在使用时先导入csv

    1. import csv
    2. # 将csv格式数据导出
    3. with open(r"b1.csv",) as a:
    4. a_csv = csv.reader(a) # 创建一个csv对象 他包含了所有数据的列表,每一行为一个元素
    5. heads = next(a_csv) # 获取csv中所有数据 包括标题
    6. heads2 = next(a_csv)
    7. print(heads)
    8. for row in a_csv:
    9. print(row)
    10. # 写入数据进b1.csv数据中
    11. head = ['姓名','手机电话','住址']
    12. rows = [('jj','130111','天津'),('xx','110119','哈尔滨')]
    13. with open(r"b1.csv","w") as f:
    14. b_csv = csv.writer(f)
    15. b_csv.writerow(head)
    16. b_csv.writerows(rows)

  • 相关阅读:
    MacOs 围炉夜话
    【java】5-线程的中断
    Elasticsearch 查询时 判断不为null或不为空字符串
    SQL Server教程 - SQL Server 压缩(Compression)
    Redis 的性能常见问题
    三位大咖的「研发效能」实战笔记|大师课精华全回顾
    Stability derivatives
    Vue之安装Vue.js devtools
    四大场景化模型算法搞定贷中营销场景|实操与效果比对
    如何理解功率谱/能量谱密度?它与自相关函数的关系?
  • 原文地址:https://blog.csdn.net/m0_73758654/article/details/132616456