一、文件的修改

文件修改的两种思路:

1、把文件内容拿出来,做修改后,清空原来文件的内容,然后把修改过的文件内容重新写进去。

步骤:

  1、打开文件:f=open('file','a+')  #必须用a+方式,用w/w+则会直接清空文件内容,用r/r+只能读,不能写

  2、读取文件:这里注意的时,a+方式打开的文件,指针默认在文件末尾,所以先要将指针放到开头f.seek(0),然后再读取

  f.read()#读取所有数据,返回字符串

  f.readline()#读取一行,返回字符串

  f.readlines()读取所有数据,返回一个list

  3、修改取出的内容

  4、清空源文件内容。注意:上面读取完整个文件数据后,指针已经在最后,此时要先把指针放在开头,再清空,所以需要操作f.seek(0) 和 f.truncate()#清空内容

  5、将修改后的内容写入:  f.write(str). 最好是能加上f.flush()#强制将缓冲区数据写入磁盘。

  6、关闭文件

例子:

f = open('name','a+',encoding='utf-8')
f.seek(0)
all_str = ''
for s in f:
new_s ='kk'+s
all_str=all_str+new_s
f.seek(0)
f.truncate() #清空文件内容
f.write(all_str)
f.close()

2、打开两个文件,其中一个文件拿出来一行修改一行,然后顺便写入另一个文件中,写完以后,将源文件删除,新文件重命名

import os
with open('a',encoding='utf-8') as fr,open('a.bak','w',encoding='utf-8') as fw:
for line in fr:
new_line = line+'bbb'
fw.write(new_line)
os.remove('words') #删除文件
os.rename('.words.bak','words') #改名

这里对文件的删除和重命名要用到os模块,需要导入import

二、json模块

json串是一个字符串,再日常开发中,接口返回数据常用json串。json模块有一些内置的方法可以将文件中的json串提取出来转换为python的字典类型,方便对数据操作

常用json操作函数:

json.load(file)#将文件中的json串提取出来,转为成字典返回出来。参数是文件。使用load函数不用读取文件,他会自动读

json.loads(str)#将一个字符串从文件提取出来,转为字典。参数是字符串。也就意味着要先读取文件,将文件的json读取出来放到字符串中,然后再传入loads函数

json.dump(dic,f,ensure_ascii=False,indent=4)#自动将字典dic写入文件f中,写入后的格式为json串。但是默认的中文写入是写的中文对应的ascii,所以加上参数ensure_ascii=False,可以直接写入中文。而indent=4表示缩进4格。美化json格式。indent的值可以任意写

json.dumps(dic,ensure_ascii=False,indent=4)#这个函数也可以将字典转化为json,返回的是要给json串,必须手动写入f.write(dic_json)

例子:load()

with open('a.json',encoding='utf-8')as fr:#a.json文件中,存放的是json格式内容
dic=json.load(fr)#直接传入参数fr,将文件json内容都出来并转为字典类型
print(dic)

loads()

f = open('p.json',encoding='utf-8')#打开文件,存储的是json格式
res = f.read()#读取内容放到字符串中,必须先读出来
dic = json.loads(res) #把json串,变成python的数据类型,传参字符串

dump()

 fw = open('user.json','w',encoding='utf-8')
json.dump(d,fw,ensure_ascii=False,indent=10) #操作文件,自动将字典写入文件,并显示为json格式。不用再次写入

dumps()

fw = open('user.json','w',encoding='utf-8')
dic_json = json.dumps(d,ensure_ascii=False,indent=4) #d是一个字段,dumps函数将字典转成json,字典转成字符串
fw.write(dic_json)#必须重新写入

三、os模块

 常用函数:

   os.remove('文件名')#删除文件


os.rename('原文件名','新文件名')#重命名文件  os.getcwd():查看当前所在路径。
 
os.chmod("x.py",2)#给文件、目录修改权限,linux系统 os.chdir("d:/")#修改当前路径,注意用/
os.getcwd() #打印出d:\  os.path.getsize(path):文件或文件夹的大小,若是文件夹返回0os.listdir(path):列举目录下的所有文件  os.path.exists(path):文件或文件夹是否存在,返回True 或 False  print(os.listdir('e:\\'))#列出一个目录下的所有文件 print(os.stat("x.py"))#获取文件信息 print(os.sep)#当前操作系统的路径分隔符。linux和windows系统分隔符不一样,在实际应用中可以这样:filename+os.sep+x.py用路径分隔符拼接路径 print(os.linesep)#当前操作系统的换行符 print(os.pathsep)#当前系统的环境变量中每个路径的分隔符,linux是:,windows是; print(os.environ)#当前系统的环境变量 print(os.name)#当前系统名称 Windows系统都是nt linux都是posix os.makedirs("xxx/python")# 递归创建文件夹,如果父目录不存在,则创建。没写绝对路径默认会在当前路径下创建。也可写os.makedirs("d:/xxx")
os.mkdir("xxx/python")#创建文件夹。如果父目录不存在会报错
os.removedirs("xxx/yyy")#递归删除文件夹。如果不存在会报

os.rmdir("xxx")删除文件夹,找不到会报错。注意路径。如果费控,会报错 res = os.system('ipconfig') #执行操作系统命令的,但是获取不到结果
#res = os.popen('ipconfig').read() #可以获取到命令执行的结果 __file__ #获取到当前文件的绝对路径 print(os.path.abspath(__file__))#获取绝对路径
print(os.path.split("/work/hehe/hehe.txt"))#分割路径和文件名,最终结果就是/work/hehe 和 hehe.txt print(os.path.dirname("e:\\syz\\ly-code"))#获取父目录,获取它的上一级目录 print(os.path.basename("e:\\syz\\ly-code\\a.txt"))#获取最后一级,如果是文件显示文件名,如果是目录显示目录名 print(os.path.exists(r"E:\syz\ly-code\day6"))#目录/文件是否存在 print(os.path.isabs("../wang.txt"))#判断是否是绝对路径。此例返回false print(os.path.isfile("xiaohei.py"))#判断是否是一个文件,1、文件要存在2、必须是一个文件
print(os.path.isdir("e:\\syz1"))#是否是一个路径,目录是否存在 size = os.path.getsize('x.py') #获取文件的大小 print(os.path.join("root",'zy,'mysql','a.sql'))#拼接成一个路径 os.walk('目录名')#例子如下 for abs_path,dir,file in os.walk(r'E:\syz\ly-code\day6'): #获取目录下内容
   print(abs_path,dir,file)
   abs_path 当前循环的绝对路径
   dir 目录下面所有的文件夹 [ ]
   file 目录下面的所有文件 []

四、random模块

常用函数:  

  print(random.randint(1,10)) #随机取整数

  print(round(random.uniform(1,99),2))#随机取1-99之间的小数,保留2位

  print(random.choice([1,2,3,4])) #只能随机取1个元素,choice参数可以字符串、list、元祖

  print(random.sample([2,3,4,5,6,7,8,9,1,0],5)) #随机取N个元素,返回的是list

      random.shuffle(x)#洗牌,打乱顺序,会改变原list的值。参数只能是list

五、string模块

  string.printable   数字、字母、特殊符号的总和

  string.punctuation  所有特殊字符

  string.ascii_uppercase  #所有大写字母

  string.ascii_lowercase  所有小写字母

  string.ascii_letters  所有字母,包括大写+小写

  string.digits  所有数字,0-9

六:sys模块

print(sys.argv)  #用来获取命令行里面运行python文件的时候传入的参数:

比如在pycharm中直接右键run xx.py,这时候sys.argv的输出结果就是xx.py 。因为如果在python命令行操作,就相当于 python xx.py.参数就是xx.py

比如你在python命令行输入python xx.py --help --d,那么sys.argv输出的结果就是xx.py --help --d

print(sys.platform)  #判断操作系统
sys.path() #python的环境变量
sys.path.append(r'E:\syz\ly-code\day5')
sys.path.insert(0,r'E:\syz\ly-code\day5')

python基础四(json\os\sys\random\string模块、文件、函数)的更多相关文章

  1. python基础之 序列化,os,sys,random,hashlib

    1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ...

  2. python基础——14(shelve/shutil/random/logging模块/标准流)

    一.标准流 1.1.标准输入流 res = sys.stdin.read(3) 可以设置读取的字节数 print(res) res = sys.stdin.readline() print(res) ...

  3. python基础 (序列化,os,sys,random,hashlib)

    1.序列化 定义: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然 ...

  4. Python 基础 四 面向对象杂谈

    Python 基础  四  面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...

  5. 《python基础教程(第二版)》学习笔记 函数(第6章)

    <python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params):  block  return values 记录函数:def f ...

  6. Python(正则 Time datatime os sys random json pickle模块)

    正则表达式: import re #导入模块名 p = re.compile(-]代表匹配0至9的任意一个数字, 所以这里的意思是对传进来的字符串进行匹配,如果这个字符串的开头第一个字符是数字,就代表 ...

  7. Python 常用内建模块(os, sys,random)

    一.os 模块 1,操作系统与环境变量 import osprint(os.name) #操作系统类型,如果是posix 说明系统是linux unix 或 mac os x :如果是nt 就是win ...

  8. os、json、sys、subprocess模块

    os模块 import os 1.创建目录(文件夹) os.mkdir(r'a') # 相对路径 只能创建单级目录 os.makedirs(r'a\b') # 可以创建单级和多及目录 2.删除目录 o ...

  9. python模块 os&sys&subprocess&hashlib模块

    os模块 # os模块可根据带不带path分为两类 # 不带path print(os.getcwd()) # 得到当前工作目录 print(os.name) # 指定你正在使用的操作系统,windo ...

随机推荐

  1. 关于setTimeout的用法注意事项

    setTimeout setTimeout的定义:setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. setTimeout的用法:setTimeout(代码片段,执行代码等待的毫 ...

  2. geth常用命令

    转载地址 https://blog.csdn.net/qq_36124194/article/details/83686823 geth常用命令 初始化私链 geth --datadir /path/ ...

  3. SpringBoot整合Redis、mybatis实战,封装RedisUtils工具类,redis缓存mybatis数据 附源码

    创建SpringBoot项目 在线创建方式 网址:https://start.spring.io/ 然后创建Controller.Mapper.Service包 SpringBoot整合Redis 引 ...

  4. HDFS 2.X新特性

    1 集群间数据拷贝 1.scp实现两个远程主机之间的文件复制 scp -r hello.txt root@hadoop103:/user/atguigu/hello.txt // 推 push scp ...

  5. 多线程系列(二)之Thread类

    在上一遍文章中讲到多线程基础,在此篇文章中我们来学习C#里面Thread类.Thread类是在.net framework1.0版本中推出的API.如果对线程的概念还不太清楚 的小伙伴请阅读我的上一遍 ...

  6. Go:grpc

    一.grpc安装 将 https://github.com/google/go-genproto 修改文件名放到 $GOPATH/src/google.golang.org/genproto 将 ht ...

  7. 如何以正确的姿势安装Vue的依赖并且启动下载好的项目

    首先,输入cd进入项目所在的目录. 然后输入   npm install --registry=https://registry.npm.taobao.org    // --后面表示使用淘宝镜像,下 ...

  8. Mac本软件安装之后打不开的解决办法

    Mac本软件安装之后打不开的解决办法 MacOS系统版本10.15.3 一,安装Axure RP 9 问题:安装之后打不开 提示“Axure RP 9已损坏,无法打开”或“打不开 Axure RP 9 ...

  9. Java动态代理(三)——Cglib动态代理

    一.Cglib动态代理Cglib是一个优秀的动态代理框架,它的底层使用ASM在内存中动态的生成被代理类的子类,使用Cglib即使代理类没有实现任何接口也可以实现动态代理功能.而且,它的运行速度要远远快 ...

  10. JMH-大厂是如何使用JMH进行Java代码性能测试的?必须掌握!

    Java 性能测试难题 现在的 JVM 已经越来越为智能,它可以在编译阶段.加载阶段.运行阶段对代码进行优化.比如你写了一段不怎么聪明的代码,到了 JVM 这里,它发现几处可以优化的地方,就顺手帮你优 ...