Python笔记四之操作文件
一、字符串方法补充(join、split)
join方法:
# join方法,连接字符串 1、把一个list变成了字符串 2、通过某个字符把list里面的元素连接起来 # 3、只要是可以循环的都可以连接起来 l=['a','b','c'] sl=str(l) #sl="['a','b','c']" str()把对象转换成一个字符串,整个list变成一个字符串,包含中括号 print(l,type(l)) print(sl,type(sl)) res=''.join(l)#以空连接起来,结果为 abc resl=','.join(l)#以逗号连接,结果为a,b,c join的对象可以是字符串变量名,也可以直接是字符串 print(resl) print(','.join('abc'))
运行结果:
['a', 'b', 'c'] <class 'list'> ['a', 'b', 'c'] <class 'str'> a,b,c a,b,c
split方法:
#split 方法:split()就是将一个字符串分裂成多个字符串组成的列表 names='ab cd' print(list(names)) name_list = names.split()#根据某个字符串,分割字符串,什么也不传的话,是以空格分割的 print(name_list) st0= 'iisongihuaniiiigongi'#是以i进行分割,第一次分割,i的左边是空,右边是'isongihuaniiiigongi',i丢掉;第二次分割,i的左边还是空,右边是'songihuaniiiigongi',i丢掉; print(st0.split('i')) str="hello boy<[www.doiido.com]>byebye" str1=str.split("[")[1].split("]")[0]#以"["进行分割,并取分割后列表中下标为1的元素,然后再以"]"分割,取分割后列表中下标为0的元素 str2=str.split("[")[1].split("]")[0].split(".") print(str1) print(str2)
运行结果:
['a', 'b', ' ', 'c', 'd'] ['ab', 'cd'] ['', '', 'song', 'huan', '', '', '', 'gong', ''] www.doiido.com ['www', 'doiido', 'com']
fomat方法:
names='ab cd' print(list(names)) name_list = names.split() print(name_list) user='牛寒阳' sex='男' age=18 addr='回龙观' money= '1000w' cars='1w台' # words = 'insert into user values ("%s","%s","%s","%s","%s","%s");'%(user,sex,age,addr,money,cars) sql = 'insert into user values ("{name}","{sex}","{age}","{addr}","{qian}","{che}");' new_sql = sql.format(age=age,che=cars,name=user,sex=sex,qian=money,addr=addr) print(new_sql) print('欢迎登录'.center(50,'*'))
运行结果:
['a', 'b', ' ', 'c', 'd'] ['ab', 'cd'] insert into user values ("牛寒阳","男","18","回龙观","1000w","1w台"); ***********************欢迎登录***********************
二、交换变量
Python可直接对整型变量进行交换,无需通过第三方,因为在底层已经引入了一个第三方变量
a = a+b # 3 b = a-b # 1 a = a-b # 2 print(a,b)#不使用变量进行交换,只适用于数字 a = 1 b = 2 c = 3b,a= a,c #交换两个变量的值,Python底层帮你引入了一个的第三方变量在交换 print(a,b,c) a,b,c=c,a,b print(a,b,c)
运结果:
2 1 3 1 3 3 3 1
三、判断
非空即真、非0即真,运用此规则,可大大简化Python的代码
# 非空即真、非0即真 # 不为空的话就是true,是空的话就是false # 只要不是0就是true,是0就是false# 布尔类型 # True False name = input('请输入你的名字:').strip() a = [] #false d={} # false c = 0 #false f = tuple() #false e='' #false print(a) if name: #name里面有没有东西,print('name不是为空的。。') else:print('输入不能为空。。')# a = b = c = 0 #定义了3个变量 ,值都是0
四、操作文件
Pythonon 默认字符集为utf-8 windows默认字符集为gbk,需加“,encoding='utf-8'”1、操作文件有三种模式:读模式r 写模式w 追加模式a;默认为读模式,可不写读模式 r 1、不能写;2、文件不存在会报错r+ 读写模式 1、默认从文件开头写入,会覆盖掉原来的内容;2、写入后文件指针变动到写入的内容末尾,读取文件时会从这里开始读取f = open('name1234','a+',encoding='utf-8') #打开文件print(f.read()) #读文件print(f.readline()) #读取一行内容print(f.readlines()) #是把文件的每一行内容放到一个list里面 写模式:1、已存在的文件写模式会将原文件内容覆盖掉;2、不存在的文件写模式会直接新建一个文件并写入 3、不能读w+ 写读模式 1、该模式下会清空原来的内容,从而导致读不到内容 2f.write('test')#写入print(f.readline())print(f.read()) 只要沾上了r,文件不存在的就会报错只要沾上了w,都会清空原来的内容
追加模式 a 在文件末尾写入
1、文件不存在的话,会帮你新建文件
2、打开一个已经存的文件,不会清空,末尾增加
3、不能读
a+ 追加读模式:能读文件,但是读不到内容
f = open('file.txt','r') #以只读方式打开一个文件,获取文件句柄,如果是读的话,r可以不写,默认就是只读,
在python2中还有file方法可以打开文件,python3中file方法已经没有了,只有open
frist_line = f.readline()#获取文件的第一行内容,返回的是一个list
print(frist_line)#打印第一行
res = f.read()#获取除了第一行剩下的所有文件内容
print(res)
f.close()#关闭文件
3、文件操作方法
f = open('file.txt','r+',encoding='utf-8')#encoding参数可以指定文件的编码
f.readable()#判断文件是否可读
fr.writable()#判断文件是否可写
fr.encoding#打印文件的编码
f.read()#读取所有内容,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
f.readlines()#读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
f.tell()#获取当前文件的指针指向
f.seek(0)#把当前文件指针指向哪
f.write('爱情证书')#写入内容
f.fulsh()#写入文件后,立即从内存中把数据写到磁盘中
f.truncate()#清空文件内容
f.writelines(['爱情证书','孙燕姿'])#将一个列表写入文件中
f.close()关闭文件
4、文件指针
# 文件指针: # 用来记录文件到底读到哪里了 # f = open('geci',encoding='utf-8') # print('read',f.read())#此时文件指针已经到末尾了,后面没内容了 # print('readline',f.readline())#基于上述原因,该语句将读不到任何内容 f = open('geci','a+',encoding='utf-8') # a\a+模式的文件指针是在末尾的 f.write('呵呵呵')#此时如果读文件将读不到任何内容,因为a/a+模式下,文件指针在末尾 f.seek(0) #移动文件指针到最前面 print('readline',f.readline()) f.write('鹏妹妹') #移动完文件指针之后,是只能读,写的时候还是在文件末尾写
5、练习
练习1:
# f=open(r'E:\课件资料\day4\access.log','a+',encoding='utf-8')#绝对路径前面加r,可避免被特殊字符被误转义 #需求 # 1、监控日志,如果有攻击咱们的,就把ip加入黑名单#分析:#1、打开日志文件#2、把ip地址拿出来#3、判断每一个ip出现的次数,如果大于100次的话,加入黑名单#4、每分钟读一次#直接循环一个文件对象的话,每次循环的是文件的每一行 #文件句柄 文件对象 import time point = 0 # 每次记录文件指针的位置 while True:#死循环,每隔60秒读取一次all_ips = [] #存放所有的ip地址f = open('access.log',encoding='utf-8')#f 文件句柄或文件对象f.seek(point)#移动文件指针,下次读取事直接读取最新的日志,否则每次将重复从第一行读取for line in f: #line 文件的每行内容,直接循环文件对象,每次取到文件的一行内容# print(line)ip = line.split()[0]#取到每一行的IP all_ips.append(ip)point = f.tell() #获取当前文件指针的位置all_ip_set = set(all_ips) #集合天然去重,只留下唯一的ip值,否则会把重复的ip重复打印for ip in all_ip_set:#此处的IP和前面循环中的IP重名,有影响吗?if all_ips.count(ip)>50:print('应该加入黑名单的ip是%s'%ip)f.close()time.sleep(60) #暂停60秒后继续循环
练习2:
import random #18612343, #12384234 # 1861253 2945 print(random.randint(1,9999)) print('1'.zfill(4))#1、先随机产生一些手机号 #2、写到文件里面 f = open('phones.txt', 'w') num = input('请输入你要产生的手机号个数:') for i in range(int(num)): # start = '1861235'random_num = str(random.randint(1, 9999))new_num = random_num.zfill(4)#补0,zfill方法的操作对象是字符串phone_num = start+new_num #这一行有问题f.write(phone_num,new_num+'\n')#换行 f.close()
五、集合
# int float list dict tuple set # 天生去重 import copy #浅拷贝 #深拷贝 lis = [1,1,2,3,4,5,6,8] #循环删list里面的数据的时候,结果会不正确 l2 = copy.deepcopy(lis) #深拷贝 等同于l2 =[1,1,2,3,4,5,6,8] # l2 = lis #浅拷贝 print(id(lis))#id函数用来查看内存地址 print(id(l2)) # l2.append('zhangliuliang') # # lis.remove(8) # print(lis) # print(id(l)) # print(id(l2)) #浅拷贝和深拷贝的区别就是深拷贝会重新开辟一个内存空间 # 0 1 2 3 4 5 6 7 # for i in l2: # if i%2!=0: # l.remove(i) # print(l)# 集合天生就能去重,集合也是无序的 s=set() #空集合 s2 = set('1234445566778') print(s2) s3 = {'1','1','3','4','5','6','7','9'} d = {'k':'v'} # 交集 并集 差集 # 就是两个集合相同的地方 # print(s3 & s2) #取交集 # print(s3.intersection(s2)) #取交集 #并集# 就是把两个集合合并到一起,然后去重 # print(s2 | s3) #取并集 # print(s2.union(s3)) #取并集 s4 = {1,2,3} s5 = {1,4,6} #差集#在一个集合里有,在另一个集合里面没有的 # S4里面有,s5里面没有的 # 取一个集合存在,另一个不存在的元素 # print( s4 - s5) #取差集 # print(s4.difference(s5)) #取差集 #对称差集#俩集合里面都没有#去掉俩集合里面都有的 # print(s4 ^ s5) # print(s4.symmetric_difference(s5)) # s4.add('ss') #加元素 # s4.pop()#随机删一个 # s4.remove('ss')#指定删除哪个 # s4.update({1,2,3}) #把另外一个集合加进去 # s4.isdisjoint(s5)#如果没有交集的话返回true print(len(s4))
转载于:https://www.cnblogs.com/jojoan/p/8760610.html
Python笔记四之操作文件相关推荐
- python之os模块操作文件与文件夹
目录 执行系统命令 1.os模块 OS操作文件与文件夹 运行脚本程序 2.ShellExecute函数 相对路径打开文件 3.subprocess模块 打开新的cmd窗口并传入命令 用通配符的方式判断 ...
- LAMP兄弟连原创视频教程(PHP笔记四--正则表达式,文件,目录操作)
8.1 正则表达式的功能介绍 与正则表达式:是用描述字符排列模式一种语法规则 作用:字符串的模式分割.匹配.查找.替换 正规字符:abcd 13456 特殊字符:() ? ^ $ 原子:(普通字符,如 ...
- python笔记七之操作MySQL、excel、Redis开发接口
一.MySQL操作补充 cur = coon.cursor(cursor=pymysql.cursors.DictCursor)建立游标的时候指定了游标类型,返回的就是一个字典了.fetchall() ...
- python中的os操作文件,文件路径
python获取文件上一级目录:取文件所在目录的上一级目录 os.path.abspath(os.path.join(os.path.dirname('settings.py'),os.path.pa ...
- Python办公自动化(四) | 批量处理文件
用同样的方式处理一堆文件夹中文件,这并不难,但就是繁.所以在遇到机械式的操作时一定要记得使用Python来合理偷懒!今天我将以处理微博热搜数据来示例如何使用Python批量处理文件夹中的文件,主要将涉 ...
- python 笔记 之 sqlalchemy操作数据库-创建表
2019独角兽企业重金招聘Python工程师标准>>> ''' pip install SQLAlchemy 操作数据库-创建表 ''' import sqlalchemy''' s ...
- python 笔记:读取mat文件
1 mat文件介绍 mat文件是matlab的数据存储的标准格式. mat文件是标准的二进制文件,还可以ASCII码形式保存和加载,在MATLAB中打开显示类似于单行EXCEL表格. --from 百 ...
- python 对象序列化 pickling_python操作文件——序列化pickling和JSON
当我们在内存中定义一个dict的时候,我们是可以随时修改变量的内容的: >>> d=dict(name='wc',age=28)>>>d {'name': 'wc' ...
- Python笔记之读取yaml文件
参考博文 [Python] 读写yaml文件和处理yaml分段 yaml 读取.追加.写入 例1 abc.yaml 代码: import yaml import osdef read_config() ...
最新文章
- Linux C函数库参考手册
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置
- redis安装190923课堂版
- Oracle数据库重启后密码失效的问题(r12笔记第91天)
- 漫谈Servlet(一)
- python函数装饰器详解_Python语言函数装饰器用法实例详解
- 云存储收银系统_爱宝云收银系统
- Google浏览器升级为最新打开网页时缓慢 “正在建立安全连接..........”解决方法
- python中的ide是什么意思_用于Python的IDE是什么?
- 3dmax修改器堆栈的妙用
- ONF(Open Networking Foundation)
- Typora最常用的记笔记教程
- 麦克马斯特计算机工程专业,麦克马斯特大学电气与计算机工程申请要求
- 用计算机弹生僻字乐谱,【计算器乐谱】抖音生僻字计算器乐谱 抖音生僻字计算器数字简谱...
- Learn to Give Up
- PPT: 解决“很抱歉 powerpoint 无法读取“的问题
- 两台Exadata搭建RAC+DG
- shiro保护你的应用程序
- 度量、流水线能力再升级,博云DevOps产品发布V3.3版本
- 高斯消元相关问题学习和模板整理
热门文章
- 百度自动提交链接的php应用seo功能实例
- css中如何实现帧布局_?如何在Python中加入多个数据帧?
- STM32H743+CubeMX-双路FDCAN同时工作的终极方案(裸机)
- 把所有圆圈连接起来的游戏_【实用教案】赶紧收藏!幼儿园秋季户外游戏大全、好玩易操作!...
- Java工作笔记-webService发布时通用的4个注解
- Python笔记-weditor的安装及基本使用
- Qt|Http笔记-两种方式发送http协议数据,获取服务器数据(GET方法)
- 计算机在娱乐中的应用有哪些,多媒体技术在娱乐方面的应用
- oracle脚本导入mysql数据库_oracle脚本导入mysql数据库
- 数组指定位置添加元素_数据结构--顺序表的9种基本运算,初始化,销毁,判断是否为空表,长度,求指定位置的元素值......