文件修改的两种方式,函数,模块,常用模块 # day10


一、文件修改的两种方式

文件修改的原理:把硬盘数据读入内存,在内存修改完毕后,再覆盖回硬盘具体来说又分为两种方案。

#方案一:
with open('test.txt',mode='rt',encoding='utf-8') as f:
   data = f.read()

with open('test.txt',mode='wt',encoding='utf-8') as f:
   f.write(data.replace('egon','EGON'))


# 方案二:
import os  # 调用os模块

with open('test.txt',mode='rt',encoding='utf-8') as f1,\
       open('.test.txt.swp',mode='wt',encoding='utf-8') as f2:
   for line in f1:
       f2.write(line.replace('EGON',"egon"))

os.remove('test.txt') # 移除文本text.txt
os.rename('.test.txt.swp','test.txt') # 将.test.txt.swp文本名改为test.txt

总结:

方案一:优点是对硬盘没有要求。缺点是源文件过大了,就很费内存。(电脑中的文本编辑器编辑 文件的方式一般都是用方案一)

方案二:优点是不费内存。缺点:不费硬盘,但在某时刻运行对硬盘有要求:不能用完,要留有足够的空间。

 

扩展知识:

1、.开头的在Linux系统中是隐藏文件(在桌面是看不见的,除非一些特殊的命令才能查看),将其作为临时的文件。

2、注意不要在Pycharm环境下用vim(就相当于我们使用的文本编辑器)打开大文件,耗内存。

二、函数

1 什么是函数 函数就是盛放功能(一系列代码)的容器 定义函数就是造出了一个工具

事先准备工具的过程->函数的定义 遇到应用场景拿来就用->函数的调用

2 为何要用函数 不用函数写出的代码问题是: 1 程序的组织结构不清晰,可读性差,可维护性差 2 可扩展性差

3 如何用函数 原则: 先定义 后调用

定义函数的语法: def 函数名(参数1,参数2,参数3,...): (推荐写文档注释) 代码1 代码2 代码3 return 值

调用函数语法: res = 函数名(值1,值2,值3)

4.return返回值的语法

函数内可以有多个return,但只要执行一次,整个函数就立即结束,并且将return后的值当做本次调用的产品返回

具体的函数返回值有三种形式:

1、 return 值 # 返回的就是该值的本身

2、 return 值1,值2,值3 # 返回的是小元组

3、 没有return或者return无值或者return None # 返回的都是None

如果这个函数只是完成了一个简单的文件处理,没有后续的处理就不需要返回值。如果需要进行后续的处理就需要返回值。例:功能.append()和.pop(),当我们用.append()进行附加时不存在返回值,而.pop()就存在返回值。

扩展知识:

1、变量名与函数名的差别:当我们打印变量名与函数名时,理论上这里打印的变量名与函数名都是变量名与函数名对应的内存地址。因此我们正常打印函数名得到的只是内存地址,但是变量名做了一些处理,使得打印出的变量名为变量名所对应的值。函数地址加括号触发函数内部代码的运行,而变量没有这种语法

2、return的额外功能:如果函数内套入很多while,for循环,return可以直接结束函数的运行

三、模块

1 什么是模块 模块一系列功能的集合体(一个py文件也可以是一个模块)

模块分为四种通用的类别   1 使用python编写的.py文件(主要接触)

  2 已被编译为共享库或DLL的C或C++扩展

  3 把一系列模块组织到一起的文件夹(注:文件夹下有一个init.py文件,该文件夹称之为包)

  4 使用C编写并链接到python解释器的内置模块

模块有三种来源: 1 python自带的模块/库 内置模块 标准库

2 第三方的库

3 自定义库

2 为何要用模块 1 拿来主义,提升开发效率 2 减少代码冗余

3 如何用模块

import导入的这种方式,在使用的时候一定要加模块名.作为前缀,优点是不会与当前变量名发生冲突,缺点是每次访问都需要加前缀。

from ... import导入的这种方式,优点是每次访问都不需要加前缀,缺点是容易与当前变量名冲突

四、常用模块

1、time模块

import time

时间戳:

print(time.time()) # 打印的是1970年的某一天到现在的秒数。主要用来时间的运算

格式化的字符串:

print(time.strftime('%Y-%m-%d %H:%M:%S')) # 主要用来看时间

格式化的时间:

obj = time.localtime()

print(obj.tm_year) # 获取今天是哪一年 print(obj.tm_yday) # 获取今天是哪一天

obj2 = time.gmtime() # 获取utc时间(世界标准时间) print(obj2)

print(obj)

用于获取时间的一部分,比如今天是哪一天,哪一年,那一月。。。

2、random模块

import random

print(random.random()) # 取0到1之间小数的随机值 print(random.randint(1,3)) #取1到3之间的整数(1和3都能取到) print(random.randrange(1,3)) # 取1到3之间的整数,取不到3(顾头不顾尾) print(random.choice([11,"aaa",333])) # 从你输入的值11,aaa,333值中随机选一个 print(random.sample([11,"aaa",333,444],2)) # 从输入的值中随即取出两个

print(random.uniform(1, 3)) # 获取大于1和小于3的小数

item=[1,3,5,7,9] random.shuffle(item) # 将item中的值全部打乱 print(item)

储备知识 print(chr(65)) # chr用于输出ASCII编码表中数字对应的字母 print(chr(90))

print(ord('A')) # ord用于输出ASCII编码表中字母对应的数字 print(ord('Z'))

随即验证码的功能:

import random

def make_code(size):
   res = ''
   for i in range(size):
       num = str(random.randint(0,9))
       s = chr(random.randint(65,90))
       res += random.choice([num,s])
   return res


print(make_code(6))

 

3、os模块

os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录 os.stat('path/filename') 获取文件/目录信息 os.sep 输出操作系统特定的路径分隔符,win下为"\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n" os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' os.system("bash command") 运行shell命令,直接显示 os.environ 获取系统环境变量 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小

4、subprocess

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM