失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python写入文本文件的数据类型必须是_三:python数据类型和文件操作

python写入文本文件的数据类型必须是_三:python数据类型和文件操作

时间:2022-09-27 05:29:27

相关推荐

python写入文本文件的数据类型必须是_三:python数据类型和文件操作

8.必须要知道、会的字符串方法

import string

#print(string.ascii_letters+string.digits)#大小写字母+数字

#print(name.find('sss'))#查找字符串的索引,找到的话返回第一次出现的索引,找不到返回-1

#print(name.format(name='niuniu', age=18))#格式化字符串

#print('abA123'.isalnum()) # 是否包含数字和字母

#print('122'.isdigit()) # 是否是数字

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

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

#strnames = 'ABCEDF'

#print('¥'.join(strnames))# join是用来通过某个字符串拼接一个可迭代对象的的每个元素的

# print('\nmysql \n'.strip()) # 默认去掉两边边的空格和换行

# print('mysqlm '.strip('m'))#当你传入某个字符串的话,它就只会去掉你指定的字符串

#print(st.replace('mysql', 'oracle')) # 替换字符串

#name1 = 'zcl p y zyz'

print(name1.split())#切割字符串,返回一个list,按照你指定的字符串去分隔这个字符串,然后放到一个list里面,如果你什么都不写的话,按照空格分割,多个空格也算一个

9.字符串方法

name = 'heLLo world'

import string

print(string.ascii_letters+string.digits)#大小写字母+数字

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

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

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

# print(name.capitalize()) # 首字母大写

# print(name.center(5, '*')) # 50个-,把name放中间

# print(name.endswith('d')) # 是否以x结尾

# print(name.find('sss'))

# 查找字符串的索引,找到的话返回第一次出现的索引,找不到返回-1

# print(name.format(name='niuniu', age=18)) # 这个是格式字符串,再第一节的博客里面已经写了

# print(name.format_map({'name': 'niuniu', 'age': 19})) # 这个也是格式化字符串,后面跟的是一个字典,字典在后面也会写

# print('abA123'.isalnum()) # 是否包含数字和字母

# print('abA'.isalpha()) # 是否是英文字母

# print('122'.isdigit()) # 是否是数字

# print('11sdf'.isidentifier()) # 是否是一个合法的变量名

# print('aA'.islower()) # 是否是小写字母

# print('AA'.isupper()) # 是否是大写字母

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

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

names = ['zcl','py','zyz']

strnames = 'ABCEDF'

# print('¥'.join(strnames))

# print('strname:',strnames)

# join是用来通过某个字符串拼接一个可迭代对象的的每个元素的

#所有字符串的方法,它都不会修改原来字符串的值,都会产生一个新的字符串

# print('wubing\nhouning')

# print('\nmysql \n'.lstrip()) # 默认去掉左边的空格和换行

# print('\nmysql \n'.rstrip()) # 默认去掉右边的空格和换行

# print('\nmysql \n'.strip()) # 默认去掉两边边的空格和换行

# print('mysqlm '.strip('m'))#当你传入某个字符串的话,它就只会去掉你指定的字符串

# p = str.maketrans('abcdefg', '1234567') # 前面的字符串和后面的字符串做映射

# print('ccaegg'.translate(p)) # 输出按照上面maketrans做映射后的字符串

#

# new_p = str.maketrans('1234567', 'abcdefg')

# print('ccaegg'.translate(new_p))

st= 'mysql is db. mysql mysql mysql'

print(st.replace('mysql', 'oracle')) # 替换字符串

# print('mysql is is db'.rfind('is')) # 返回最右边字符的下标

# names = ['zcl','py','zyz']

new_name = []

#1、先得有一个list存它

#2、循环判断逗号分隔的值

name1 = 'zcl p y zyz'

# print(name1.split())

#切割字符串,返回一个list,按照你指定的字符串去分隔这个字符串,然后放到一个list里面

#如果你什么都不写的话,按照空格分割,多个空格也算一个

# print('1+2+3+4'.split()) # 切割字符串,返回一个list

# print('1+2+3\n1+2+3+4'.splitlines()) # 按照换行符分割

# print('Abcdef'.swapcase()) # 大小写反转

a = 0

b = 2

#不引入第三个变量

a = a+b

#a是3

b = a-b

#b是1

a = a-b

#a是2

print('=====这里才是咱们要看的')

print(a,b)

#引入第三个变量的方法

# c = a

# #c是1

# a = b

# #a是2

# b = c

# print(a,b)

#不用第三方变量,把a和b的值交换过来

# a,b = b,a

# print('a:',a)

# print('b:',b)

a,b = b,a

print('a:',a)

print('b:',b)

二、列表操作

1.列表是可变变量,它是可以通下标修改值的

names = [1,2,3,"liliyun",'panyang']#定义列表

# print(names[3])#通过下标取值

names[0]='zhangyizhou'#修改值

names.append('zhaocunlei')#给list从最末尾添加值

names.insert(0,'yinwenqiao')#指定位置添加元素

# print('before ',names)

# print('pop返回值:',names.pop())

# print('remove 方法的返回值',names.remove('yinwenqiao'))

# del names[0]#使用del关键字删除指定元素

# names.pop()#默认删除最后一个元素,删谁也把它的值返回了

# names.pop(2)#删除指定位置的元素

# names.clear()#清空列表

# names.remove('yinwenqiao')#删除指定的值,要和pop方法区别开来,pop如果删除的话,传是下标,

# reomve传的是一个元素的值

# print(names.count('hsdfsdf'))#查找值在list里面的次数

# print('names',names)

# print(names.index('yinwenqiao'))#返回查找元素的下标,如果有多个话返回第一个的,如果没有的话就会报错

# print(names.index('yinwenqiao',3,4))#后面可以加上查找开始位置和结束位置

stus = ['yangwb','yangwn','yanghj']

# print('加起来的',stus+names)#两个列表合并

# print('这个是extend:',stus.extend(names))#把另一个列表里面的每个值挨个添加到前面的列表中

# print('这个是extend:',stus)

# nums = [23,34,21,2,456,35,12324324]

# nums.sort()#排序,默认是升序

# print('sort:',nums)

# print(nums.sort(reverse=True))#排序,指定reverse=True就是降序

# print('sort降序:',nums)

# print(nums.reverse())

# print(nums)

# print('zhangyizhou' in names)#用in来判断一个元素是否在list里面

# print(names[-3])#下标是-1的话,代表最后一个元素

#循环列表

# for name in names:

# print(name)

#多维数组、列表、list

lis = [1,'lily',19.8,['lily','lilei',['heheh','haha']]]

print(lis[3][2][1])

a1 =[1,2,3]

a2 = [4,5,6]

# a1.extend(a2)

a1.append(a2)

print(a1)

三、切片

切片的意思就是从list里面或者字符串里面取几个元素

切片操作对字符串也是完全适用的

name1 = 'zcl,pyzyz'

names = ['zcl','py','zyz']

# print(names[0:2])# 从第几个取到第几个,这个也是顾头不顾尾

# print(names[:2])# 如果是从第一个开始取,取到某一个下标结束,那么最前面是可以不写的

# print(names[1:])#如果是从前面某个开始取,取到最后面结束,那么最后面是可以不写的

# print(names[:])#如果最前面和最后面都不写的话,取整个列表

#nums = list(range(1,11))

# print(nums[1:10:2])#如果最后面写上步长的话,就是每隔几个取一次

# nums.reverse()

print(nums)

print(nums[::2])

print(nums[::-2])

print(nums[::-1])

#当切片的步长为负数时,是从末尾开始取值的,然后隔几个取一次

#如果步长为-1的时候,还有反转的功能

四、元组

lis = ['127.0.0.1','3306']

tp = (1,2,3,4,5,6,1,1,1)

lis[1]='3307'

print(lis)

print(tp[0])

print(tp.count(1))

print(tp.index(1))

#元组是一个不可变的list,只有count方法和index方法

#定义元组的时候,如果元组只有一个元素,那么你要在这个元素后面,加一个逗号,要不然就是一个字符串

new_lis = tuple(lis)

print(type(new_lis))

a='hello world' #这个是定义字符串

b=('hello world',) #这个是定义元组?

print('this is',type(b))

五、字典

1.字典里面的key是不能重复的

info = {

'name':'xiaoming',

'sex':'nan',

'age':20,

'id':1,

}

# print(info['id'])#通过key取值

# print(info['addr'])#通过key取值

# print(info.get('id'))#通过key取值

# print(info.get('addr'))#通过key取值

2.用中括号取值和get方法取值的区别 ,get方法获取不到key的时候,不会报错,中括号取值找不到key会报错,get方法还可以多传一个参数,如果get不到key的话,那么返回xx,如果不写的话,默认get不到返回None

info['addr'] = 'Beijing'#给字典新增一个值

info.setdefault('phone',13811111)#给字典新增一个值

info['id'] = 7#在有这个key的情况下那就是修改这个key的value,没有这个key的话,就是新增

3.字典是无序的

# del info['addr']

# print(info.pop('addr'))

# info.popitem()#随机删除一个元素

# print(info)

#pop删除的时候必须得指定key,pop方法会返回删除的key对应的value

# info.clear()

#清空字典

all = {

'car':

{

'color':['red','yellow','black'],

'moeny':1111111,

'pailiang':"2.5L",

'name':"BMW"

} ,

'car1':

{

'color':['red','yellow','black'],

'moeny':1111111,

'pailiang':"2.5L",

'country':"china"

},

'car2':

{

'color':['red','yellow','black'],

'moeny':1111111,

'pailiang':"2.5L"

}

}

# all.get('car').get('color')[1] = 'orange'

# all['car']['color'][1]='orange'

# print(all)

# print(all.keys())#获取该字典的所有key

# print(all.values())#获取该字典所有的value

# print(all.items())#获取字典的key和value,循环的时候用

#直接循环字典循环的是字典的key,如果想循环的时候同时获取到key和value

#那么就要用.items方法

info2 = {

'name':"hhh",

'sex':'nan'

}

info.update(info2)#把两个字典合并到一起,如果有一样的key,那么更新value

# print(info)

# print(info2.items())

#items方法的作用就是为了让你循环的时候同时把key和value取到

# for k,v in info.items():

# print('%s is %s'%(k,v))

# for k in info2:

# print(k)

# for k in info2:

# print(k,info2[k])

#第二种方式效率比较高

#info.has_key('name')

#python2里面有这个方法,是判断key是不是存在的,python3里面没有

# print('name' in info2)

#python3里面直接用in来判断key是否存在

六、文件读写

1、先打开文件

2、读取/写入内容

3、保存文件

import os

f = open('a.txt','a+',encoding='utf-8')#f代表的是这个文件的对象,也叫句柄

f.seek(0)#移动文件指针

#文件对象也是可迭代的

# count = 0

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

# res = f.read()

# f.seek(0)

# f.truncate()#清空文件内容

# new_res = res.replace('nihao','nibuhao')

# f.write(new_res)

#8G的文件

#下面这些是修改文件内容的

# f = open('a.txt','a+',encoding='utf-8')

# #f代表的是这个文件的对象,也叫句柄

# f.seek(0)#移动文件指针

# fw = open('a.txt.new','w',encoding='utf-8')

# for line in f:

# new_res = line.replace('学','不学')

# fw.write(new_res)

# f.close()

# fw.close()

# os.remove('a.txt')

# os.rename('a.txt.new','a.txt')

# print(f.read())#读文件内容,返回的是一个字符串

# print(f.readlines())##读文件内容,返回的是一个列表

# print(f.readline())#只读文件一行的内容

# f.write('zhangyizhou')#写文件的时候,只能是字符串

# f.writelines(['123','456','789'])#可以把列表写到里

#如果在打开的文件的时候,不指定模式,那就是读模式

# fw = file('a.txt','r')

#在python2里面也可以用file这个函数去操作文件,但是在python3里面只能用open

#文件打开模式有3种

#1、w写模式,它是不能读的,如果用w模式打开一个已经存在的文件,

#会清空以前的文件内容,重新写

#w+,写读模式,只要沾上w,肯定会清空原来的文件

#2、r读模式,只能读,不能写,而且文件必须存在

#r+是读写模式,只要沾上r,文件必须得存在

#3、a追加模式,也是只能写,在文件的末尾添加内容

#4、rb+、wb+,ab+,这种是二进制模式打开或者读取,一些音乐文件、图片等等

#flush用法

import time

fw = open('python.txt','w',encoding='utf-8')

fw.write('下周不上课!')

fw.flush()#写完之后立马生效

exit('拜拜')

time.sleep(30)

fw.close()

#with的用法,你文件不再用的时候,就会自动给你关闭文件

# with open('python.txt',encoding='utf-8') as fr:

# print(fr.read())

六、重定向

**重定向可快速清空一个文件内容

一下为几个Linux命令:

cat a.txt > b.txt 把a中的内容清空放到b中

rm -rf b.txt 删除b.txt

touch b.txt 建一个新文件b.txt

cat > b.txt

**下面是一个小程序:

写一个程序,监控nignx的日志,如果有人攻击你,就把他的IP地址加入黑名单:

把IP加入黑名单的策略是,1分钟之内,如果同一个IP地址,请求次数超过200,那就加入黑名单

思路:

1⃣️:读文件

2⃣️:字符串分割、list的统计次数

3⃣️:把IP加入黑名单,执行Linux命令

4⃣️:切割日志

重定向即把一个文件里面的内容,复制到另一个文件里面

******************************

import time

while True:

ips = []

#存放所有的ip地址

with open('access.log','a+') as fr:

fr.seek(0)

for line in fr:

ip = line.split()[0] ips.append(ip) fr.seek(0)

fr.truncate()

print('ips,长度:',len(ips))

ip_set = set(ips)#存放的是去重之后的ip地址

print('去重之后的ip_set的长度:',len(ip_set))

for ip in ip_set:

if ips.count(ip)>200:

print('已经把%s加入黑名单'%ip)

# os.system('iptables -I INPUT 1 -p tcp -s %s -j DROP'%ip)

time.sleep(60)

七、三元运算符

a = 1

b = 2

#下面这个

c = a if a>1 else b

#和下面是一样的效果

if a > 1:

c = a

else:

c = b

#第一种

# s = []

# nums = list(range(1,11))#list顾头不顾尾,所以取值为1-10

# for i in nums:

# if i%2 == 0:

# s.append(i)

# print(s)

# 第二种

# ss = [i for i in nums if i%2 == 0]

# print(ss)

这两种是一样的

八、集合

1.集合也是一种数据类型,一个类似列表东西,他的特点是无序的,不重复的,也就是说集合中是没有重复的数据

2.无序不能根据下标取值

3.set是集合,集合是天生可以去重的

eg:

# d = {'id':1,'phone':138}#这是字典

# l = {1,2,2,3,3,4}#这是集合

# s = set(l)#强制类型转换,把list转成集合

# for i in s:

# print(l)

4.定义集合

# nums = [1,1,1,1,1,13,33]

# num_set = set(nums)

# 通过强制类型转换来定义集合

# print(num_set)

# list1 = {1,2,3,4,5,6,8}

# list2 = {2,3,4,6,1}

# list3 = {1,2,3}

# print(list1.intersection(list2)) # 取交集,也就是取list1和list2中都有的

# print(list1 & list2)# 取交集

# print(list1.union(list2)) # 取并集,也就是把list1和list2合并了,然后去除重复的

# print(list1 | list2)# 取并集

# print(list1.difference(list2)) #取差集 在list中存在,在list2中没有的

# print(list1 - list2) #取差集 在list中存在,在list2中没有的

# print(list3.issubset(list1))#判断list3是不是list1的子集

# print(list1.issuperset(list3))#判断list1是不是list3的父集

# print(list1.isdisjoint(list3))#判断list1和list3是否有交集

# print(list1.symmetric_difference(list2))#对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉

# print(list1 ^ list2)#对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉

# list1.add(888)#添加元素

# list1.update([777,666,666])#添加元素

# list1.remove(777)#删除元素,如果元素不存在会报错

# list1.pop()#删除一个随机的元素,并返回删除的元素

# list1.discard('dddd')#如果删除的元素存在,删除,不存在不做处理

如果觉得《python写入文本文件的数据类型必须是_三:python数据类型和文件操作》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。