一、文件

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. HDU2859 Phalanx (动态规划)

    Today is army day, but the servicemen are busy with the phalanx for the celebration of the 60th anni ...

  2. Tensorflow基本语法

    一.tf.Variables() import tensorflow as tf Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) se ...

  3. 金融量化分析【day110】:Pandas-DataFrame索引和切片

    一.实验文档准备 1.安装 tushare pip install tushare 2.启动ipython C:\Users\Administrator>ipython Python 3.7.0 ...

  4. phpstorm快捷键大全

    前言:这段时间换了编辑器,所以挺多命令也改变了 转载来自:https://www.jianshu.com/p/ffb24d61000d?utm_campaign=maleskine&utm_c ...

  5. 前端开发常用 Linux 命令

    clear // 清理命令窗口(可简写为cls) exit // 关闭命令窗口 mkdir 文件夹名 // 新建文件夹 cd 文件夹名 // 进入文件夹 cd .. // 返回上一级文件夹目录 rm ...

  6. JavaScript类型判断详解(Object.prototype.toString.call()方法进行数据类型的可靠判断)

    前言 在编写一些类库中,我们经常需要判断一些未知的用户的输入和配置,故而需要进行一系列的类型判断.故而总结下JS是如何进行类型判断的 typeof typeof操作符返回一个字符串,表示未经计算的操作 ...

  7. python chrome的自定义启动

    # encoding:utf-8 """@version: python27@author: fafa@site: http://www.phpgao.com@softw ...

  8. JAVA进阶13

    间歇性混吃等死,持续性踌躇满志系列-------------第13天 1.查看线程的运行状态 package code0327; class Demo01 implements Runnable { ...

  9. css布局中的百分比布局

    1.在说到百分比是前,先简单了解下基本的单位 英寸(inch) :in 1 in=2.54cm厘米(centimeter):cm毫米(millimeter):mm磅(point):pt 1pt=1/7 ...

  10. 【easy】111. Minimum Depth of Binary Tree求二叉树的最小深度

    求二叉树的最小深度: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; ...