文件的高级应用

一、三种模式

  1. 'r+'模式

    with open('test.py','r',encoding = 'utf8') as fr:
    print(fr.writable())
    fr.write('x=10')
    print(fr.write())
  2. 'w+'模式

    with open('test.py','w+',encoding = 'utf8') as fr:
    print(fr.readable)
    fr.write('x=10')
    print(fr.read())
  3. 'a+'模式

    with open('test.py','a+',encoding = 'utf8') as fr:
    print(fr.readable)
    print(fr.writable())

指针的应用

一、文件的内置方法

  1. seek( offset,whence): offset代表文件指针的偏移量,单位是字节

    with open('test.txt','r',encoding = 'utf8') as fr:
    fr.seek(1) #偏移1位,默认从文件头开始
    fr.seek(0,2) #2表示从文件末开始,指针指向最末
    fr.seek(1,0) #0表示从文件头开始,偏移1位
  2. tell( ):每次统计都是从文件开头到当前指针所在位置

    with open('test.txt','r',encoding = 'utf8') as fr:
    #fr.seek(2,0)
    print(fr.tell()) #从0到2,即2
  3. read(n): 只有在模式下的read(n),n代表的是字符个数,除此之外,其他但凡涉及文件指针的都是字节个数(读取个数)

    with open('test.txt','r',encoding = 'utf8') as fr:
    print(fr.read(n))
  4. truncate(n): truncate(n)是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件。

    with open('test.txt','a',encoding = 'utf8') as fr:
    fr.truncate(2) #第二个字符后的内容清空 #注意:如果内容是“中奖啦”,2个字节一个字,如果truncate(3),则'中'之后乱码

二、相关知识:覆盖

#假设test.txt内容为:中中大大奖啦

with open('test.txt','rt',encoding = 'utf8') as fr:
fr.seek(6,0)
fr.write('小小小') #按理说应该变为“中中小小大大奖啦”
print(fr.read()) #结果为“中中小小奖啦”

注意:因为插入字符会占用内存,所以系统一般都是覆盖。

文件修改的两种方式

一、方式一:

import os
with open('test.py','r',encoding='utf8') as fr,\
open('test_swap.py','w',encoding='utf8') as fw:
data = fr.read()
data = data.replace('sb','dsb')
fw.write(data)
os.remove('test.py') #删除文件
os.rename('test_swap.py','test.py') #重命名文件

二、方式二:

import os
with open('test.py','r',encoding='utf8') as fr,\
open('test_swap.py','w',encoding='utf8') as fw:
for i in fr:
i = i.replace('sb','dsb')
fw.write(i)
os.remove('test.py') #删除文件
os.rename('test_swap.py','test.py') #重命名文件

函数的定义

一、登录&注册

register( )注册:
usn = input("请输入注册姓名:").strip()
pwd = input("请输入注册密码:").strip()
with open('user_info.txt','a',encoding='utf8') as fa:
fa.write(f'{usn}:{pwd}\n')

for i in range(2):
again_pwd = input("请再次输入密码:").strip()
if again_pwd == pwd:
print('恭喜你注册成功啦~')
else:
print("注册失败~")
continue
break
login( )登录:
inp_usn = input("请输入注册姓名:").strip()
inp_pwd = input("请输入注册密码:").strip()
with open('user_info.txt', 'r', encoding='utf8') as fr:
data = fr.read()
user_list = data.split("|")
print(user_list)
user_info = f'{inp_usn}:{inp_pwd}'
if user_info in user_list:
print('恭喜你啦~')
else:
print('登录失败~')

二、函数的使用

def 函数名(param1、param2……):  #定义阶段只检测语法
"""
函数功能的描述信息
:param1:描述
:param2:描述
:return:返回值
"""
code 1
code 2
code 3
...

return 返回值
函数名() #会显示语法错误
函数:注册
# 注册功能函数
def register():
"""注册功能"""
username = input('username: ').strip()
pwd = input('password: ').strip()

with open('38a.txt', 'a', encoding='utf8') as fa:
fa.write(f"{username}:{pwd}\n")
fa.flush()


register()
# 复用
register()
register()
函数:登录
# 登录功能函数
def login():
"""登录功能"""
inp_username = input('username: ').strip()
inp_pwd = input('password: ').strip()

with open('38a.txt', 'rt', encoding='utf8') as fr:
for user_info in fr:
user_info = user_info.strip('\n')
user_info_list = user_info.split(':')
if inp_username == user_info_list[0] and inp_pwd == user_info_list[1]:
print('login successful')
break
else:
print('failed')


login()

三、函数的返回

注意:print返回的值不可调用,而return的值可以继续调用

定义函数的三种形式

一、无参函数

可以单独使用,无变量

def add(x,y):
print(int(x)+int(y)) x = input('number1: ')
y = inout('number2: ')
add(x,y)

二、有参函数

不能单独使用,要加参数(配件)

def func():
x = input('number1: ')
y = inout('number2: ')
print(int(x)+int(y))

func()

三、空函数

只是定义函数,什么都没有

def func():
pass

函数的参数

一、形参(位置形参)

定义阶段,占个位而已

def add(x,y):  #此处的x, y是形参

二、实参(位置实参)

调用阶段,具有实际意义

def add(x,y):
<代码块> add(x,y) #此处的x, y是实参

注意:位置形参和位置实参是一一对应的。

三、关键字实参

注意:函数的参数尽量不超过两个

def shopping(name = 'Nick'):
goods_dict = {1:'car',2:'house',3:'job'}
print(f'恭喜{name},得到一个{goods_dict[3]}!') shopping() #不输入
shopping() #输入'John',将会取代默认形参

#恭喜Nick,得到一个job!
#恭喜John,得到一个job!


#关键字实参
def shopping(x,name = 'Nick'): #默认形参放后面
goods_dict = {1:'car',2:'house',3:'job'}
print(f'恭喜{name},得到一个{goods_dict[3]}!') shopping(name = 'Nick',x= 1)
shopping(1,'Nick')

【0808 | Day 11】文件的高级应用/修改以及函数的定义/使用/参数的更多相关文章

  1. ALTER FUNCTION - 修改一个函数的定义

    SYNOPSIS ALTER FUNCTION name ( [ type [, ...] ] ) RENAME TO newname DESCRIPTION 描述 ALTER FUNCTION 修改 ...

  2. chmod修改文件的权限/chown修改文件和目录的所有者

    ll指令的显示的信息为(当前目录下只有nameservice1一个目录): drwxr-xr-x 3 hdfs hdfs 4096 4月 14 16:19 nameservice1 上述信息分别表示: ...

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改 ASP.NET MVC+EF框架+EasyUI实现权限管系列  (开篇)   (1):框架搭建    ...

  4. windows 下文件的高级操作

    本文主要说明在Windows下操作文件的高级方法,比如直接读写磁盘,文件的异步操作,而文件普通的读写方式在网上可以找到一大堆资料,在这也就不再进行专门的说明. 判断文件是否存在 在Windows中并没 ...

  5. 基于NSString处理文件的高级类

    基于NSString处理文件的高级类 我已经把处理文件的类简化到了变态的程度,如果你还有更简洁的方法,请告知我,谢谢! 使用详情: 源码: // // NSString+File.h // Maste ...

  6. chmod修改文件的权限/chown修改文件和目录的所有者(转)

    ll指令的显示的信息为(当前目录下只有nameservice1一个目录): drwxr-xr-x 3 hdfs hdfs 4096 4月 14 16:19 nameservice1 上述信息分别表示: ...

  7. linux ,mac连接, git pull error, chmod修改文件的权限/chown修改文件和目录的所有者

    去项目目录下 启动服务 setsid npm start & Mac下如何用SSH连接远程Linux服务器 https://www.cnblogs.com/littleBit/p/536280 ...

  8. php上传大文件时,服务器端php.ini文件中需要额外修改的选项

    几个修改点: 1.upload_max_filesize 上传的最大文件 2.post_max_size 上传的最大文件 3.max_execution_time 修改为0表示无超时,一直等待 4.m ...

  9. touch — 设定文件的访问和修改时间

    PHP touch 设定文件的访问和修改时间 touch (PHP 4, PHP 5) touch — 设定文件的访问和修改时间 说明 bool touch ( string $filename [, ...

随机推荐

  1. c++ 归并排序

    c++ 归并排序 输入输出格式 输入格式: 第11行为一个正整数NN,第22行包含NN个空格隔开的正整数a_ia i ​ ,为你需要进行排序的数,数据保证了A_iA i ​ 不超过1000000000 ...

  2. shell脚本常见错误一二三

    1.$'\r': 未找到命令的解决 2.: 不是有效的标识符h: 3.cd "$path"/webapps/ROOT 不能正常进入ROOT文件夹,$path并未与后面的字符结合起来 ...

  3. 用Python玩数据-笔记整理-第一章-练习与测试

    编程题: 简单的输入输出:编程实现输入姓.名的提示语并接受用户输入,并单独显示姓.名和全名,执行效果如下所示: Input your surname:ZHANG Input your firstnam ...

  4. druid一步到位

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons) 在配置application.yml文件的时候,原本写的是MySQL的连 ...

  5. 整型,布尔值,字符串详解,for语句 练习

    2019 年 7 月 8 日 1.将今天的课上的代码敲一遍,然后整理笔记 已完成 2.有变量name = "aleX leNb" 完成如下操作: 移除 name 变量对应的值两边的 ...

  6. java高并发系列 - 第14天:JUC中的LockSupport工具类,必备技能

    这是java高并发系列第14篇文章. 本文主要内容: 讲解3种让线程等待和唤醒的方法,每种方法配合具体的示例 介绍LockSupport主要用法 对比3种方式,了解他们之间的区别 LockSuppor ...

  7. Hybrid App从概念到实战

    最近一直在准备找工作,看了很多公司的招聘介绍,有相当一部分直接写:熟悉 Hybrid App 开发加分!正好,我司开发的就有这种 Hybrid App--使用WebViewJavascriptBrid ...

  8. Oracle 学习笔记二

    一.oracle通用函数vnl(a,b) 用于任何类型,如果a的值不为null返回a的值否则返回b的值 条件判断oracle中可以使用 case 字段 when 条件1 then 表达式1 when ...

  9. 个人永久性免费-Excel催化剂功能第48波-拆分工作薄内工作表,堪称Excel界的单反

    一个工作薄有多个相同类型的工作表,然后想通过批量操作,把每个工作表都另存为一个工作薄文件,这个批量拆分工作薄,绝大多数插件都有此功能,就如懂点VBA的高级用户也常常有点不屑于用插件来完成,自己写向行V ...

  10. ASP.NET登录验证码解决方案

    目录 #验证码效果图 #代码 0.html代码 1.Handler中调用验证码生成类 2.验证码图片绘制生成类 3.高斯模糊算法类 #注意 #参考 在web项目中,为了防止登录被暴力破解,需要在登录的 ...