一、文件

1.控制文件内指针的移动

文件内指针移动,只有t模式下的read(n),n代表的字符的个数
除此以外文件内指针的移动都是以字节为单位

with open('a.txt',mode='rt',encoding='utf-8') as f:
msg=f.read(1)#t模式下的read,按照字符数来移动
print(msg) with open('a.txt',mode='rb') as f:
msg=f.read(3)#t模式以外的的所有指针移动,按照字节数来移动
print(msg.decode('utf-8'))

f.seek(offset,whence)有两个参数:

  offset: 代表控制指针移动的字节数
  whence: 代表参照什么位置进行移动
  whence = 0: 参照文件开头(默认的),特殊???,可以在t和b模式下使用
  whence = 1: 参照当前所在的位置,必须在b模式下用
  whence = 2: 参照文件末尾,必须在b模式下用

with open('a.txt',mode='rt',encoding='utf-8') as f:
f.seek(6,0)#指针从文件开头起的第6个字节开始
msg=f.read(1)#读取一个字符
print(msg)
with open('a.txt',mode='rb') as f:
f.seek(3,0)#指针从文件开头算起的第3个字节开始
msg=f.read(3)#读取3个字节
print(msg.decode('utf-8'))
with open('a.txt',mode='rb') as f:
msg=f.read(3)#读取三个字节
print(msg.decode('utf-8'))
f.seek(3,1)#指针从当前位置算起,移动3个字节
msg1=f.read(3)#读取三个字节
print(msg1.decode('utf-8'))
with open('a.txt',mode='rb') as f:
f.seek(0,2)#指针移动到文件末尾
print(f.tell())#打印为空,因为文件末尾后面没有任何内容
f.seek(-3,2)#指针移动到以文件末尾算起,往前3个字节
msg=f.read(3)
print(msg.decode('utf-8'))

2.文件修改的两种方式

修改文件的方式一:

1 将文件内容由硬盘全部读入内存
2 在内存中完成修改
3 将内存中修改后的结果覆盖写回硬盘

with open('d.txt',mode='rt',encoding='utf-8') as f:
all_data=f.read()
print(all_data,type(all_data)) with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write(all_data.replace('alex','dsb'))

错误的做法

with open('d.txt',mode='rt',encoding='utf-8') as f1,open('d.txt',mode='wt',encoding='utf-8') as f2:
all_data=f1.read()
f2.write(all_data.replace('dsb','alex'))

修改文件的方式二:

1 以读的方式打开源文件,以写的方式打开一个临时文件
2 从源文件中每读一样内容修改完毕后写入临时文件,直到源文件读取完毕
3 删掉源文件,将临时文件重命名为源文件名

import os

with open('d.txt',mode='rt',encoding='utf-8') as read_f,open('.d.txt.swap',mode='wt',encoding='utf-8') as write_f:
for line in read_f:
write_f.write(line.replace('alex','dsb')) os.remove('d.txt')
os.rename('.d.txt.swap','d.txt')

总结

方式一:
优点: 在文件修改的过程中硬盘上始终一份数据
缺点: 占用内存过多,不适用于大文件

方式二:
优点: 同一时刻在内存中只存在源文件的一行内容,不会过多地占用内存
缺点: 在文件修改的过程中会出现源文件与临时文件共存,硬盘上同一时刻会有两份数据,即在修改的过程中会过多的占用硬盘,

二、函数的基本使用

1 什么是函数

函数就是具备某一功能的工具

2 为什么要用函数

1 程序的组织结构不清晰,可读性差
2 代码冗余
3 可扩展性差

3 如何用函数

函数的使用必须遵循的原则:先定义,后调用
修理工事先准备工具的过程即函数的定义
修理工遇到应用场景拿来工具就用即函数的调用

语法:

def 函数名(参数1,参数2,...):
"""
文档注释
"""
code1
code2
code3
......
return 返回值

def:定义函数的关键字
函数名: 就相当于一个变量名,指向函数的内存地址,
  注意:函数的内存地址()就可以出发函数体代码的执行

参数: 参数是函数的调用者为函数体代码传值的媒介,在python中函数的参数无需声明类型
"""文档注释""" : 推荐写上
代码块:就是函数体功能的具体实现
return 返回值 :函数体代码块运行的成果

函数的使用分为两个阶段:
定义阶段: 只检测语法,不执行代码
调用阶段:运行函数体代码

#先定义
def foo():
print("from foo") #后调用
print(foo)
foo() 定义时无参,意味着调用时也无需传入参数 #先定义
def bar(x,y):
print(x)
print(y)
#后调用
bar('a',2) 定义时无参,意味着调用时也必须传入参数

定义无参函数:当函数体的代码逻辑不依赖任何传入的值就能执行,就不需要定义参数

def print_msg():
print('='*50)
print('welecome.....'.center(50,' '))
print('='*50) print_msg()
print_msg()

定义有参函数:当函数体的代码逻辑依赖于外部调用者传入的值才能执行,必须定义参数用来接收外部传入的值

def max2(x,y):
x=1
y=3
if x > y:
print(x)
else:
print(y)
max2(1,4)#3,内部有下,x y,所以不需要传入参数 def max2(x,y):
if x > y:
return x
else:
return y
res=max2(1,4)
print(res)#4

08-Python入门学习-文件与函数的更多相关文章

  1. python入门学习:7.函数

    python入门学习:7.函数 关键点:函数 7.1 定义函数7.2 传递实参7.3 返回值7.4 传递列表7.5 传递任意数量的实参7.6 将函数存储在模块中 7.1 定义函数   使用关键字def ...

  2. python入门学习:9.文件和异常

    python入门学习:9.文件和异常 关键点:文件.异常 9.1 从文件中读取数据9.2 写入文件9.3 异常9.4 存储数据 9.1 从文件中读取数据 9.1.1 读取整个文件  首先创建一个pi_ ...

  3. python入门学习:8.类

    python入门学习:8.类 关键点:类 8.1 创建和使用类8.2 使用类和实例8.3 继承8.4 导入类 8.1 创建和使用类   面向对象编程是最有效的软件编写方法之一.在面向对象编程中,你编写 ...

  4. python入门学习:6.用户输入和while循环

    python入门学习:6.用户输入和while循环 关键点:输入.while循环 6.1 函数input()工作原理6.2 while循环简介6.3 使用while循环处理字典和列表 6.1 函数in ...

  5. python入门学习:5.字典

    python入门学习:5.字典 关键点:字典 5.1 使用字典5.2 遍历字典5.3 嵌套 5.1 使用字典   在python中字典是一系列键-值对.每个键都和一个值关联,你可以使用键来访问与之相关 ...

  6. python入门学习:3.操作列表

    python入门学习:3.操作列表 关键点:列表 3.1 遍历整个列表3.2 创建数值列表3.3 使用列表3.4 元组 3.1 遍历整个列表   循环这种概念很重要,因为它是计算机自动完成重复工作的常 ...

  7. python入门学习:2.列表简介

    python入门学习:2.列表简介 关键点:列表 2.1 列表是什么2.2 修改.添加和删除元素2.3 组织列表 2.1 列表是什么   列表,是由一系列按特定顺序排列的元素组成.你可以创建包含字母表 ...

  8. Python入门学习:1.变量和简单的数据类型

    python入门学习:1.变量和简单的数据类型 关键点:变量.字符串.数字 1.1 变量的命名和使用1.2 字符串1.3 数字1.4 注释 1.1 变量的命名和使用   变量,顾名思义是一个可变的量, ...

  9. Python入门篇-文件操作

    Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...

随机推荐

  1. pycharm pip安装包

    第一种方式为命令行模式,在pycharm界面按alt+F12调出命令行窗口,在窗口内输入pip install matplotlib回车即可,如图1所示 方法二:使用菜单项File——settings ...

  2. HMM隐马尔科夫算法(Hidden Markov Algorithm)初探

    1. HMM背景 0x1:概率模型 - 用概率分布的方式抽象事物的规律 机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推测. 概率模型(p ...

  3. CMDB资产管理系统开发【day25】:表结构设计2

    表结构设计1详细注释代码 # _*_coding:utf-8_*_ __author__ = 'luoahong' from assets.myauth import UserProfile from ...

  4. Docker:手动制作镜像 [五]

    一.制作docker镜像的步骤 1.启动容器安装软件服务 2.将安装好服务的容器commit提交为镜像 3:.启动新容器来测试新提交的镜像 二.制作支持ssh远程登录的docker镜像 1.启动容器安 ...

  5. va注解应用实例 - Annotation, 自定义注解, 注解类规则【转】

    本文介绍了java的自定义注解及注解类编写的规则, 并通过实例来说明下如何使用java的注解. 实例演示了注解在类,构造方法,方法和字段的使用. 可以从这里下载到完成的工程代码: http://dl. ...

  6. NOI-OJ 1.13 ID:23 区间内的真素数

    整体思路 这里需要大量使用素数,必须能够想到只求出M到N之间的素数是不够的,因为M到N之间数字的反序有可能是大于M或小于N的数字,例如M=2,N=20,那么19的反序91大于20,所以使用埃拉拖色尼算 ...

  7. Groovy 设计模式 -- 享元模式

    Flyweight Pattern 享元模式, 将对象的相同属性, 以节省内存为目的,存储为一份公共对象, 所有对象共用此分对象. The Flyweight Pattern is a pattern ...

  8. shell1

    shebang = sharp-bang = #! 1.echo $PATH export PATH="$PATH:/home/user/bin" PREPEND prepend( ...

  9. react中键盘enter事件处理

    对于常见的搜索需求业务场景,用户输入完成后,点击enter事件请求数据,要求不提交页面,实现数据局部更新,这需要用到react中的表单Forms. 处理方法: (1)html书写 form标签中去掉a ...

  10. AGC电路以及AD8347正交解调芯片

    1.AGC电路的工作原理 1.1AGC电路的用途 随着电磁环境的日益恶化, 不同频段电磁信号之间的相互串扰, 以及可能出现的人为干扰, 将会导致接收机输入端口的信号动态范围较大, 一旦出现电路饱和或是 ...