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 = 3

b,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+ 追加读模式:能读文件,但是读不到内容

  2、文件的基本操作

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.readline()#读一行

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

时间: 2024-08-24 15:25:37

Python笔记四之操作文件的相关文章

python笔记第七天 文件操作

1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt') try: all_the_text = file_object.read( ) finally: file_object.close( ) 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法. 2.读文件 读文本文件 in

python模拟SQL语句操作文件

1.需求 在文本界面输入SQL语句,查询相应的数据,例如输入下面的语句 print(''' 支持大小写的SQL语句查询,大写或者小写都可以 1. select * from db1.emp 2. select * from db1.emp limit 4 3. select * from db1.emp where id > 24 4. select * from db1.emp where name like 李 5. select * from db1.emp where id > 10

Python第四天(基本文件操作二)

Python基本文件操作 创建一个文件 >>> wu = open('20150118.py','w') >>> wu.write('hello\n') >>> wu.write('world\n') >>> wu.close() 读取一个文件 >>> ang = open('20150118.py') >>> wuang = ang.read() >>> wuang 'hello

Python笔记第2章,文件,字符串,列表,元组,字典,集合的使用

<--目录--> 1)Python文件处理 2)字符串处理 3)列表.元组.字典的使用 4)集合的妙用 1.文件处理 文件处理模式 r 以只读模式打开文件 w 以只写模式打开文件 a 以追加模式打开文件 r+  为读写模式 rw跟r+一样,先读后写 w+  为写读模式,会先清空这个文件,再往里面写 a+  为追加模式 rb 以读写模式打开 wb 以写读模式打开 ab 以追加及读模式打开 +b 表示必须以二进制的模式处理文件,Windows系统上使用有效,Linux系统上使用无效,但工作中Lin

Python全栈自动化系列之Python编程基础(操作文件)

一.打开文件 open函数: 1)常见参数:第一个,要打开文件或者文件的路径:第二个参数,文件打开的模式,第三个参数,encoding,用来指定文件打开的编码格式(注意,使用rb模式时就不要使用了) 2)常见文件打开的模式: ①r:只读模式,读取普通文件 ②rb:只读模式,是以二进制的编码格式去打开文件,可以读取图片.视频等 3)参数一详解: ①当读取同级目录下的文件,可以直接写文件名 ②当读取的不在同一级目录下的文件时,必须要写上文件的绝对路径 注意:使用open这个方法时,读完文件记得使用c

ThinkPHP 学习笔记 ( 四 ) 数据库操作之关联模型 ( RelationMondel ) 和高级模型 ( AdvModel )

一.关联模型 ( RelationMondel ) 1.数据查询 ① HAS_ONE 查询 创建两张数据表评论表和文章表: tpk_comment , tpk_article .评论和文章的对应关系为,一条评论 id 对应一篇文章,为 ONE_TO_ONE 关系 ( 一对一 ).评论表的结构为: 其中 aid 字段与文章表的 id 字段对应.打开自定义模型 ArticleModel,让模型继承于 RelationModel,然后定义成员属性 $_link,代码: ArticleModel.cla

RHCE7学习笔记2-- 命令行操作文件

1.创建与删除文件 touch xxxx 创建一个文件 touch -t 20141225 xxxx 创建一个文件并指定时间属性 rm xxx 删除文件 rm -rf 强制删除文件 2.创建目录与删除目录 mkdir xxx 创建一个目录: mkdir   -p xxx/yyy 递归创建目录: rmdir  xxx/  删除空目录: rm  -rf  XXX/  强制删除非空目录: 3.拷贝文件与目录 cp  /path1/xxx /path2/ yyy拷贝path1路径下的xxx与xxx1 文

python笔记四:面向对象

1.类 class Student(object): def __init__(self, name, score): self.name = name self.score = score 1)__init__构造方法,__init__方法的第一个参数永远是self,表示创建的实例本身,调用时,不用传递该参数. 2)__del__   析构函数,释放对象时使用 3)__call__函数调用 2.一个简单的例子: class Studet(object): def __init__(self,n

python笔记四(条件判断/循环/break和continue)

一 条件判断 if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4> if判断条件还可以简写,比如写: if x: print('True') 只要x是非零数值.非空字符串.非空list等,就判断为True,否则为False. 二 循环 for...in循环 #列表的循环 names = ['Michael', 'Bob', 'Tracy'