翼度科技»论坛 编程开发 python 查看内容

Python文件的基础操作(2)

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
Python文件的基础操作(2)


  • 二进制模式下读写操作
  • 练习
  • 控制文件内指针(光标)的移动
  • 文件的修改
  • 函数的介绍
练习
  1. # 小练习: 编写拷贝工具
  2.         1. 让用户输入被拷贝的文件路径(源文件路径)
  3.     2. 输入即将要拷贝的文件路径(目标文件路径)
  4.     3. 以读的模式打开源文件,以写的模式打开目标文件
  5. source_file_path = input('请输入待拷贝的文件路径:').strip()
  6. dst_file_path = input('请输入目标文件的路径:').strip()
  7. with open(r'%s' % source_file_path, 'rb') as read_f:
  8.     with open(r'%s' % dst_file_path, 'wb') as write_f:
  9.         for line in read_f:
  10.             write_f.write(line)
复制代码
二进制模式下读写的操作
  1. #大前提:文件内指针的移动都是Bytes为单位的,唯一例外的是t模式下的read(n),n以字符为单位
  2. with open('a.txt',mode='rt',encoding='utf-8') as f:
  3.      data=f.read(3) # 读取3个字符
  4.    
  5. with open('a.txt',mode='rb') as f:
  6.      data=f.read(3) # 读取3个Bytes
  7. # 之前文件内指针的移动都是由读/写操作而被动触发的,若想读取文件某一特定位置的数据,则则需要用f.seek方法主动控制文件内指针的移动,详细用法如下:
  8. # f.seek(指针移动的字节数,模式控制):
  9. # 模式控制:
  10. # 0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的
  11. # 1: 该模式代表指针移动的字节数是以当前所在的位置为参照的
  12. # 2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的
  13. # 强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用
复制代码
  1. t模式下:
  2.     f.read() 如果不指定参数,默认情况下是一次性读取所有
  3.     f.read(5) 如果指定了参数,返回的就是字符个数
  4.    
  5. b模式下:
  6.     f.read(5) 如果指定了参数,返回的就是字节个数
  7.     如果文件中有中文字符,切记书写的数字要是3的倍数,如果有中文也有英文字符,这个数字需要计算了
复制代码
  1. 指针:就可以理解成光标的移动
  2. # with open('a.txt', 'r', encoding='utf-8') as f:
  3. #     print(f.read(5)) # 你helloworld
  4. #     f.seek(3, 1)
  5. #     print(f.read())
  6. #     # print(f.read(5))
  7. #     # print(f.read())
  8. with open('a.txt', 'rb') as f:
  9.     print(f.read(2))  # helloworld
  10.     f.seek(-3, 2)
  11.     print(f.read())
  12.     # print(f.read(5))
  13.     # print(f.read())
  14. """
  15. f.seek()
  16.     offset: int,
  17.         代表的是移动的偏移量
  18.         如果是正数,就往右边移
  19.         如果是负数,就往左边以----------》左边要可移动
  20. """
  21. # 小练习:实现动态查看最新一条的效果
  22. # 小练习:实现动态查看最新一条日志的效果
  23. import time  # 导入的一个时间模块
  24. # linux里面的一条命令:tail -f access.log
  25. with open('access.log', mode='rb') as f:
  26.     f.seek(0, 2)
  27.     while True:
  28.         line = f.readline()
  29.         if len(line) == 0:
  30.             # 没有内容
  31.             time.sleep(0.5) # 睡眠0.5秒
  32.         else:
  33.             print(line.decode('utf-8'), end='')
复制代码
文件修改
  1. mode='r+'   
  2. mode='w+t'
  3. mode='a+t'
  4. # 可读可写
  5. # 可读可写
  6. # 可读可写
  7. 1. 硬盘中得数据是不允许直接修改的
  8. 2. 内存中得数据是可以直接修改的
  9. a.txt
  10. kevinkevin     山东    179    49    12344234523
  11. 李二蛋     河北    163    57    13913453521
  12. 王全蛋     山西    153    62    18651433422
  13. '''方式一:'''
  14. # 1. 读取文件内的所有数据
  15. # 快捷键:shift+enter
  16. with open('a.txt', 'r', encoding='utf-8') as f:
  17.     data = f.read()
  18. print(data)
  19. # 2. 读取完字符之后,做字符替换
  20. with open('a.txt', 'wt', encoding='utf-8') as f:
  21.     f.write(data.replace('kevin', 'kevinSB'))
  22.    
  23. '''方式2:'''
  24. import os
  25. with open('a.txt',mode='rt',encoding='utf-8') as read_f, \
  26.         open('.a.txt.swap',mode='wt',encoding='utf-8') as wrife_f:
  27.     for line in read_f:
  28.         wrife_f.write(line.replace('SB','kevin'))
  29. os.remove('a.txt')
  30. os.rename('.a.txt.swap','a.txt')
  31.    
复制代码
函数的介绍

函数的语法
  1. def 函数名(参数1,参数2,...):
  2.         """文档描述"""
  3.         函数体
  4.         return 值
  5. """
  6. 1. def 就是定义函数的关键字,它不能够省略,必须写
  7. 2. my_len():函数名,函数名的命名遵循变量的命名规范,他也是必填的,不能省略的,括号不能省略
  8. 3. a, b称为是函数的参数,是可选的,可有可无
  9.     参数就是执行函数的一些前提条件
  10. 4. '''函数注释'''
  11.     注释不参与函数的执行,只起到函数功能的提示作用,以及各个参数是什么意思
  12.     # 可有可无的,但是,推荐每个函数都加上函数注释
  13. 5.  # 函数体
  14.     才是函数的核心,它是函数所具备的核心功能,应该是必须有的,pass
  15.     没有函数体的函数是没有意义的函数,一般情况都是要有函数体的
  16. 6. 返回值  return 函数的返回值
  17.     # 返回值也是可选的,可以有返回值,也可以没有返回值,但是一般情况下都要有返回值
  18.     # 一个函数只能有一个返回值...
  19. """
复制代码
函数的定义与调用
  1. 1. 函数必须先定义后调用,没有定义函数是一定不能够调用的
  2. 2. 函数在定义阶段,只检测语法是否错误,不检测逻辑是否有问题
  3. 3. 逻辑上的错误只会在调用阶段检测
  4. 4. 函数一定是被调用之后才会执行函数内部的代码块,不调用函数一定不会执行函数的
  5.         # 如何调用函数
  6.     函数名() # 只要函数名加括号一定会执行函数体代码
  7.     函数如果在定义阶段有参数,那么,在调用的时候,连参数一块写上
  8.    
  9. 函数调用的内部原理:
  10. 1. 先在内存空间中申请一块空间地址来存储函数体代码
  11. 2. 把函数名和函数体所在的空间地址绑定在一起
  12. 3. 以后只需要通过函数名()来访问函数体代码即可
复制代码
函数的类型
  1. 1. 内置函数
  2.         # Python解释器中原本就存在的,可以直接拿来使用,无需定义,直接调用
  3.     len print input 之前学习的数据类型的各个方法
  4. 2. 自定义函数
  5.         # 程序员自己写的函数,就必须先定义后调用
  6.     1. 无参函数:函数在定义阶段没有参数
  7.             def my_len():
  8.             pass
  9.         
  10.         my_len()
  11.     2. 有参函数:在函数定义阶段有参数的存在
  12.             def my_len(a, b):
  13.             pass
  14.         
  15.         my_len(1, 2)
  16.     3. 空函数
  17.             def my_len():
  18.             pass
  19.         
  20.        """作用就在于可以帮助我们梳理业务逻辑"""
复制代码
来源:https://www.cnblogs.com/zhangfanshixiaobai/p/17680117.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具