Python 变量、字符串方式、集合、文件操作

1、判断

# 非空即真、非0即真

# 不为空的话就是true,是空的话就是false

# 只要不是0就是true,是0就是false

# 布尔类型

# True False

name = input('请输入你的名字:').strip()

a = [] #false

d={} # false

c = 0 #false

f = tuple() #false

e='' #false

 

if name: #name里面有没有东西,

print('name不是为空的。。')

else:

print('输入不能为空。。')

# a = b = c = 0 #定义了3个变量 ,值都是0

 

2、交换变量

方法1:

a = 1

b = 2

a = a+b # 3

b = a-b # 1

a = a-b # 2

print(a,b)

方法2:

b,a= a, #交换两个变量的值,Python底层帮你引入了一个的第三方变量在交换

print(a,b)

 

3、字符串方式

a = 'Python&^^'

# print(a.count('t'))

# print(a.index('t'))

# print(a.find('t'))

# print(a.replace('t','T'))

# print(a.isdigit()) #是否全都是数字

# print(a.islower()) #是否全都是x小写字母

# print(a.isupper()) #是否全都是大写字母

# print(a.isalpha()) #是否全都是汉字或者字母

# print(a.isalnum()) #只要里面没有特殊符号,就返回true &…

# print(a.upper()) #变成大写

# print(a.lower())#变成小写

# print(a.startswith('test')) #以xx开头

# print(a.endswith('.xls')) # 以xx结尾

import string

print(string.ascii_lowercase) #所有的小写字母

# print(string.ascii_uppercase) #所有大写字母

# print(string.digits) #所有的数字

# print(string.ascii_letters) #所有大写字母和小写字母

# print(string.punctuation) #所有的特殊字符

 

 

# l=['zhang','liu','liang']

# res = ','.join(string.ascii_lowercase) #1、join把list的字符串连接起来,它把一个list变成了字符串

#2、通过某个字符串把list里面的每个元素连接起来

#3、只要join里面的内容可以循环的,join都可以帮你连起来

# names='abcd'

# 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,'*'))

 

4、集合

#python数据类型有: int float list dict tuple set

集合set是Python中一种基本数据类型,它分为可变集合(set)和不可变集合(frozenset)两种。类似于其他语言,集合是一个无序不重复元素集,包括创建集合set、向集合中添加元素、删除集合中的元素、求集合的交集、并集、差集等操作。

set集合类需要的参数必须是迭代器类型的,如:序列、字典等,然后转换成无序不重复的元素集。由于集合是不重复的,所以可以对字符串、列表、元组进行去重操作。

# 集合特性:天生去重

import copy

#浅拷贝

#深拷贝

浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象

# lis = [1,1,2,3,4,5,6,8] #循环删list里面的数据的时候,结果会不正确

# l2 = copy.deepcopy(lis) #深拷贝

# # l2 = lis #浅拷贝

# print(id(lis))

# 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

 

5、文件操作

file 对象使用 open 函数来创建,

open('words')

# python 2 \python3a是一样的

# file() #python2

#utf-8 bbk

# 读模式r 写模式w 追加模式a

f = open('names','a+',encoding='utf-8') #打开文件

print(f.read()) #读文件

# print(f.readline()) #读取一行内容

# print(f.readlines()) #是把文件的每一行放到一个list里面

f.write('双方都')#写入

# print(f.read())

#只要沾上了r,文件不存在的就会报错

#只要沾上了w,都会清空原来的内容

 

# 读模式 r 读写模式 r+

#1、不能写

#2、文件不存在的话会报错

# 写模式 w 写读模式 w+

#1、文件不存在的话,会帮你新建文件

#2、打开一个已经存的文件,他会清空以前文件的内容

#3、不能读

 

# 追加模式 a 追加读模式 a+ #文件末尾去增加内容

# 1、文件不存在的话,会帮你新建文件

# 2、打开一个已经存的文件,不会清空,末尾增加

# 3、不能读

 

#1、先开打一个不存在,写点多东西

# 2、打开一个已经存的文件,写点东西

# 3、 读内容

 

文件指针:

用来记录文件到底读到哪里了

f = open('naems','a+',encoding='utf-8')

a模式的文件指针是在末尾的

f.write('呵呵呵')

f.seek(0) #移动文件指针到最前面

f.write('因为爱情') #移动完文件指针之后,是只能读,写的时候还是在文件末尾写

print(f.read())

 

文件练习示例1:

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
   phone_num = start+new_num  #这一行有问题
   f.write(phone_num+'\n')
f.close()

文件练习示例2:

#需求

# 1、监控日志,如果有攻击咱们的,就把ip加入黑名单

 #分析:

#1、打开日志文件

#2、把ip地址拿出来

#3、判断每一个ip出现的次数,如果大于100次的话,加入黑名单

#4、每分钟读一次

 #直接循环一个文件对象的话,每次循环的是文件的每一行

#文件句柄 文件对象

import time

point = 0  # 每次记录文件指针的位置
while True:
    all_ips = [] #存放所有的ip地址
    f = open('access.log',encoding='utf-8')
    f.seek(point)#移动文件指针
    for line in f:
        ip = line.split()[0]
        all_ips.append(ip)
    point = f.tell() #记录了指针的位置
    all_ip_set = set(all_ips)  #
    for ip in all_ip_set:
        if all_ips.count(ip)>50:
            print('应该加入黑名单的ip是%s'%ip)
    f.close()
    time.sleep(60) #暂停60秒

# for i in all_ips:
#     if all_ips.count(i)>100:
#         print('攻击的ip是%s'%i)

 

posted @ 2018-04-12 00:21  蓝波湾  阅读(111)  评论(0编辑  收藏  举报