1.字符串用法

 name = 'daniel'

 print(name.capitalize())         #首字母大写
>>>daniel
print(name.count('a')) #统计指定的字符
>>>1
print(name.center(50,'-')) #一共打印50个字符,不够就用-代替,将name放在中间
>>>----------------------daniel----------------------
print(name.endswith('el')) #判断结尾是不是'el'
>>>True
print(name.expandtabs(tabsize=30)) #如果在一个字符前面输入\t(tab)的话就会自动打印三十个空格
>>>daniel
print(name.find('a')) #查找制定字符的位置
>>>1
names = '{name} is {year} years old'
print(names.format(name='Daniel',year=18)) #为临时变量赋值
>>>Daniel is 18 years old
print(name.index('d')) #获取指定字符的下标
>>>0
print(name.isdigit()) #判断变量是否是证书
>>>Flase
print(name.isalnum()) #判断变量是否为阿拉伯字符(包含数字和英文)
>>>True
print(name.isalpha()) #判断变量是否为纯英文字符
>>>True
print(name.isdecimal()) #判断变量为10进制数字
>>>False
print(name.isidentifier()) #判断是不是一个合法的变量名
>>>True
print(name.islower()) #判断变量是否为小写
>>>True
print(name.isnumeric()) #判断变量是否只有数字
>>>False
print(name.istitle()) #判断变量是否是首字母大写(每个单词)
>>>False
print(name.isprintable()) #判断是否能打印
>>>True
print(name.isupper()) #判断是否全部都是大写
>>>False
print('+'.join(['','',''])) #将列表中的东西加入到'+',不能是str,如果是数字就要''放入
>>>1+2+3
print(name.ljust(50,'*')) #打印五十个字符,不够就用*代替放在右边
>>>daniel********************************************
print(name.lrjust(50,'*')) #与上面相反
print(name.lower()) #将大写变成小写
>>>daniel
print(name.upper()) #将小写变成大写
>>>DANIEL
print('\nDanile'.lstrip) #删除左边的空格
print('Daniel\n'.rstrip) #删除右边的空格
print('\nDaniel\n'.strip) #删除所有的空格
print('DanielDD'.replace('D','d',1)) #替换后面的1表示只替换第一个
>>>danielDD
print('Daniel DD'.rfind('D')) #找到指定的值的最右边的下标
>>>8
print('Daniel 1 2 3 4'.split()) #使用指定的字符为分隔符,分割成列表,默认为空格
>>>['Daniel', '', '', '', '']
print('Daniel 1 2 3 4'.splitlines()) #同上,可识别不同系统
print('Dianiel'.swapcase()) #大写变小写
>>>dANIEL
name = "Daniel","Man"
print('is'.join(name)) #字符串拼接
>>>Danieliszhaoyue

2.集合操作

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

常用操作:

a = set([1,2,3,4,5]) #创建数值集合
b = set(['Hello']) #创建字符集合
c = set([1,3,5,888])
print(a | b) #a和b的并集
print(a.union(b)) #同上
>>>{1, 2, 3, 4, 5, 'Hello'} print(a & c) #a和c的交集
print(a.intersection(c)) #同上
>>>{1, 3, 5} print(a - c) #a和c的差集
print(a.difference(c)) #同上
>>>{2, 4} print(a ^ c) #对称差集,在a或b中,不会同时在两者中
print(a.symmetric_difference(c)) #同上
>>>{2, 4, 888}

基本操作:

 c.add('xxx')         #添加一项
a.update([111,222,333]) #添加多项
print(a,c)
>>>{1, 2, 3, 4, 5, 333, 111, 222} {1, 3, 5, 'xxx', 888} a.remove(5) #删除一项
print(a)
>>>{1, 2, 3, 4, 333, 111, 222} print(len(a)) #a的长度,跟list的index一样
>>>7 print(3 in a) #判断3是不是在a里面,也可以判断其它的集合
>>>True print(3 not in a) #与上相反
>>>False print(b.issubset(a)) #判断b中的所有元素a里面是否都有
print(b <= a) #意思同上
>>>Flase print(b.issuperset(a)) #判断a里的所有元素b是否全有
print(b >= a) #意思同上
>>>Flase

3.文件操作

对文件操作流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件

基本操作:

  文件内容:

 你等着一辆火车,
它会把你带到远方.
你明白自己希望火车把你带到哪儿,
不过你也心存犹豫,
但这一切都没有关系.
——因为我们在一起.

Inception space

 f = open('E:/python/file/test.txt')
print('first line:',f.readline())
>>>first line: 你等着一辆火车,
print(f.read())
>>>它会把你带到远方.
你明白自己希望火车把你带到哪儿,
不过你也心存犹豫,
但这一切都没有关系.
——因为我们在一起.

打开文件的模式有:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

  • r+,可读写文件。【可读;可写;可追加】
  • w+,写读
  • a+,同a

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab

其它语法:

 f.tell()   #查看现在的光标位置

 f.seek(0)   #指定光标回到哪里,多用于文件重新读取,和tell一起使用

 f.flush()  #刷新

 f.truncate(10)  #截断,默认从0开始,后面是结束
print(f.read())
>>>你等着一辆

补充:

 #with 语句
#为了避免打开文件后忘记关闭,可以通过管理上下文,即: with open('file','r') as f: #与f = open('file','r')一样 如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。 在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即: with open('file1','r') as f1 , open('file2','r') as f2:

4.字符转编码操作:

超级超级详细版!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>http://www.cnblogs.com/yuanchenqi/articles/5956943.html

1).在python2默认编码是ASCII, python3里默认是unicode

2).unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

3).在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

文件操作小实例

要求:

现有配置文件httpd.conf,内容如下:

<VirtualHost *:80>
DocumentRoot /var/www/html/
ServerName www.baidu.com
ErrorLog "logs/baidu.com-error.log"
CustomLog "logs/baidu.com-access.log" common
</VirtualHost> backend www.baidu.com
server 1.1.1.1 1.1.1.1 weight 100 maxconn 2000
server 2.2.2.2 2.2.2.2 weight 100 maxconn 2000
backend www.sina.com
server 3.3.3.3 3.3.3.3 weight 100 maxconn 3000
server 4.4.4.4 4.4.4.4 weight 100 maxconn 3000

对这个文件可进行增删查改操作

增加:是增加一条backend记录,是一整块,包括下面的server

删除:可以删除一条server

查询:查询到输入的backend"xxx.xxx.com"以下的server内容

修改:改backend记录中的一条server

 # -*-conding:utf-8-*-
#Author:Daniel import os def file_operation(filename,data_backend,return_list,type):
'''
统一文件操作接口
:param filename: 传入原文件名字
:param data_backend: 自己拼接一个完整的"backend"
:param return_list: "backend"下"server"字段,以一个列表存放
:param type: 文件类型,用于具体操作文件
:return:
'''
if type == 'query':
tag = False
data_list = []
with open(filename, 'r') as f:
for i in f:
if i.strip() == data_backend:
tag = True
continue
if tag and i.startswith("backend"):
tag = False
break
if tag and i:
data_list.append(i.strip())
return data_list
elif type == 'add':
with open(filename, 'r') as read_file, \
open("haproxy_new.txt", 'w') as write_file:
for i in read_file:
write_file.write(i)
for i in return_list:
if i.startswith("backend"):
write_file.write(i + "\n")
else:
write_file.write("%s%s\n" % (' ' * 4, i))
os.remove(filename)
os.rename("haproxy_new.txt", filename)
elif type == 'change':
with open(filename, 'r') as read_file, \
open("haproxy_new.txt", 'w') as write_file:
tag = False
tag_2 = False
for i in read_file:
if i.strip() == data_backend:
tag = True
continue
if i.startswith("backend"):
tag = False
if not tag:
write_file.write(i)
else:
if not tag_2:
for i in return_list:
if i.startswith("backend"):
write_file.write(i + "\n")
else:
write_file.write("%s%s\n" % (' ' * 4, i))
tag_2 = True
os.remove(filename)
os.rename("haproxy_new.txt", filename) else:
print("啥也不是") def query(data):
'''
用户查询接口
:param data:用户输入的数据,例子:www.baidu.com
:return:
'''
data_backend = "backend %s" % data
return_list = file_operation('haproxy.txt',data_backend,None,type='query')
for i in return_list:
print(i)
return return_list def add(data):
'''
用户添加接口
:param data:用户输入的数据,必须是字典形式,例如{"backend":"www.faker.com","server":"6.6.6.6","weight":"20","maxconn":3000}
这里,文件如果没有backend字段会将这个字典存进去,如果有则会存server字段
:return:
'''
backend = data["backend"] #取值
return_list = query(backend) #取值,query函数返回的一个列表
data_backend = "backend %s" % backend #自己拼接的backend字段
server_value = "server %s %s wieght %s maxconn %s" % (data["server"],\
data["server"],\
data["weight"],\
data["maxconn"]) #自己拼接的server字段
if not return_list:
return_list.append(data_backend)
return_list.append(server_value)
file_operation("haproxy.txt",data_backend,return_list,type="add")
else:
return_list.insert(0,data_backend)
if server_value not in return_list:
return_list.append(server_value)
file_operation("haproxy.txt", data_backend, return_list, type="change") def remove(data):
'''
用户删除接口
:param data: 用户输入的数据,必须是字典形式,例如{"backend":"www.faker.com","server":"6.6.6.6","weight":"20","maxconn":3000}
这里,文件如果没有backend字段或者server字段会出现提示信息,如果有则删除server字段
:return:
'''
backend = data["backend"]
return_list = query(backend)
data_backend = "backend %s" % backend
server_value = "server %s %s weight %s maxconn %s" % (data["server"],\
data["server"],\
data["weight"],\
data["maxconn"])
if not return_list or server_value not in return_list:
print("\033[31;1m没找到\033[0m") else:
return_list.insert(0,data_backend)
return_list.remove(server_value)
file_operation("haproxy.txt", data_backend, return_list, type="change") def modify(data):
'''
用户输入的数据,必须是列表形式,例如[{"backend":"www.faker.com","server":"6.6.6.6","weight":"20","maxconn":3000},
{"backend":"www.faker.com","server":"5.5.5.4","weight":"20","maxconn":3000}]
这里,文件如果没有backend字段或者server字段会出现提示信息,如果有则修改server字段,列表第0个值为旧值,第二个值则为新值
:param data:"data"传进来是个列表,0为要修改的旧值,1为修改的新值
:return:
'''
backend = data[0]["backend"]
return_list = query(backend)
data_backend = "backend %s" % backend
old_server_value = "server %s %s weight %s maxconn %s" % (data[0]["server"],\
data[0]["server"],\
data[0]["weight"],\
data[0]["maxconn"])
new_server_value = "server %s %s weight %s maxconn %s" % (data[1]["server"],\
data[1]["server"],\
data[1]["weight"],\
data[1]["maxconn"])
if not return_list or old_server_value not in return_list:
print("\033[31;1m没找着\033[0m")
else:
return_list.insert(0,data_backend)
index = return_list.index(old_server_value)
return_list[index] = new_server_value
file_operation("haproxy.txt", data_backend, return_list, type="change") if __name__ == '__main__':
options = '''
1.查询
2.添加
3.删除
4.修改
5.退出
'''
options_dict = {
"":query,
'':add,
"":remove,
"":modify,
"":exit,
}
while True:
print(options)
choice = input("选择>>:").strip()
if len(choice) == 0 or choice not in options_dict:continue
if choice == '':break data = input("数据>>:").strip()
if choice != '':
data = eval(data)
options_dict[choice](data)

当然上面肯定会有一些小bug但是完成上面的四个功能,完全没问题

随时都有可能更新的学霸版

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: Daniel import os def query(data):
if not data:
data=input("请输入你要查询的域名>>:").strip()
backend_data = "backend %s" % data
tmp_list = []
tag = False
with open("httpd.txt","r") as r_file:
for line in r_file:
if line.strip() == backend_data:
tmp_list.insert(0,backend_data)
tag = True
continue
if tag and line.startswith("backend"):
tag = False
if tag:
tmp_list.append(line.strip())
return tmp_list def add(data):
backend = data["backend"]
backend_data = "backend %s" % backend
tmp_list = query(backend)
splicing_server = "server %s %s weight %s maxconn %s" % (data["server"]["server"], \
data["server"]["server"], \
data["server"]["weight"],\
data["server"]["maxconn"]) if not tmp_list:
tmp_list.append(backend_data)
tmp_list.append(splicing_server)
with open("httpd.txt", 'r') as r_file, \
open("http_new.txt", 'w')as w_file:
for r_line in r_file:
w_file.write(r_line)
for i in tmp_list:
if i.startswith("backend"):
w_file.write(i + "\n")
else:
w_file.write("%s%s" % (" " *4,i))
else:
if splicing_server in tmp_list:
print("此条目已存在")
return
else:
tmp_list.append(splicing_server)
ops(tmp_list,backend_data)
print("添加完毕") def delete(data):
backend = data["backend"]
backend_data = "backend %s" % backend
tmp_list = query(backend)
splicing_server = "server %s %s weight %s maxconn %s" % (data["server"]["server"], \
data["server"]["server"], \
data["server"]["weight"],\
data["server"]["maxconn"])
if not tmp_list:
print("不好意思,没有backend记录,请仔细检查一下")
return
else:
if splicing_server not in tmp_list:
print("不好意思,没有这条server记录")
return
else:
tmp_list.remove(splicing_server)
ops(tmp_list,backend_data)
print("删除完毕") def update(data):
if not data:
data = input("请输入你要更新的域名记录:")
# backend = data["backend"]
# backend_data = "backend %s" % backend
tmp_list = query(data)
# splicing_server = "server %s %s weight %s maxconn %s" % (data["server"]["server"], \
# data["server"]["server"], \
# data["server"]["weight"], \
# data["server"]["maxconn"])
if not tmp_list:
print("没有这个域名记录")
return
else:
for i in tmp_list:
print(i)
server_record = input("请输入你要修改的Server记录>>:")
if server_record not in tmp_list:
print("没有这条Server记录")
else:
backend_data = "backend %s" % data
new_record = input("请输入新修改的记录>>:")
index = tmp_list.index(server_record)
tmp_list[index] = new_record
ops(tmp_list,backend_data) def ops(tmp_list,backend_data):
tag = False
write = False
with open("httpd.txt", 'r') as r_file, \
open("http_new.txt", 'w')as w_file:
for i in r_file:
if i.startswith(backend_data):
tag = True
continue
if not tag:
w_file.write(i)
if tag and not write:
for i in tmp_list:
if i.startswith("backend"):
w_file.write(i + "\n")
else:
w_file.write("%s%s" % (" " * 4, i + "\n"))
write = True
if tag and write and i.startswith("backend"):
w_file.write(i)
tag = False
os.remove("httpd.txt")
os.rename("http_new.txt", "httpd.txt") if __name__ == '__main__':
msg='''
1: 查询
2: 添加
3: 删除
4: 更新
5: 退出
'''
menu_dic = {
"":query,
"":add,
"":delete,
"":update,
}
while True:
print(msg)
choice = input(">>:").strip()
if choice == "":
break
if choice not in msg or len(choice) == 0:
continue
if choice != "" and choice !="":
data = input("数据>>:").strip()
try:
data = eval(data)
res = menu_dic[choice](data)
except:
print("对不起,你输入的数据格式不对,(字典格式)")
continue
else:
data=""
res = menu_dic[choice](data)
if type(res) == list:
if not res:
print("没有!")
else:
for i in res:
print(i)

day4-基础 字符串操作,文件操作,字符转编码的更多相关文章

  1. C# 基础 字符串 集合 文件操作

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. python基础之 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  3. Python基础知识(八)----文件操作

    文件操作 一丶文件操作初识 ###f=open('文件名','模式',编码): #open() # 调用操作系统打开文件 #mode #对文件的操作方式 #encoding # 文件的编码格式 存储编 ...

  4. Python学习—基础篇之文件操作

    文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...

  5. python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: #/usr/bin/env ...

  6. Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数

    1.        集合 1.1      特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...

  7. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  8. Node基础篇(文件操作)

    文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...

  9. python学习笔记-(七)python基础--集合、文件操作&函数

    本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: &g ...

  10. Day2-Python基础2---集合和文件操作

    一.集合操作 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 s = set([1,4,5,7,3, ...

随机推荐

  1. ZQUOJ 22854 (优先队列+剪枝)

    题目:给出K , N , M   :  N为顶点数 , M为边数  : 求K个从1到N的不重复的最短边 , 可以来回的走: 分析:很自然的就可以想到用个优先队列广收下K次终点嘛 , 但是.0.0 爆了 ...

  2. dataTable 加了竖向滚动条导致列头样式错位的问题 / 亲测可用,不好用你打我,用好了记得点推荐

    tab在没有显示之前,容器是没有高度宽度的,而dt在自动计算高度和宽度时是获取的外部容器的高度和宽度,当切换tab时,dt获取不到这个高度宽度,导致列头都挤在一起,是用下面代码解决此问题 $('a[d ...

  3. 【中间件】IIS短文件名枚举漏洞

    1.1.1  漏洞描述 为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3 短文件名. 在Windows下查看对应的短文件名,可以使用命令 ...

  4. Python实现图片验证码识别

    转载地址:https://blog.csdn.net/EB_NUM/article/details/77060009 具体想要实现上面的代码需要安装两个包和一个引擎 在安装之前需要先安装好Python ...

  5. css百分比单位

    1 :字体大小 父级字体的百分比 2:margin-left margin-top 父级容器的宽度 3:宽高 width: 50%; 父级宽的一半height: 50%; 父级高的一半

  6. spring初始化bean的目的

    初始化bean就是为了将所有需要的bean全部装载到容器里面,等我们需要用到哪个bean就将哪个bean从容器里面拿出来

  7. web安全漏洞种类

    (参考知道创宇) SQL注入: SQL注入(SQL Injection),是一个常见的发生于应用程序和数据库之间的web安全漏洞,由于在开发过程中的设计不当导致程序中忽略了检查,没有有效的过滤用户的输 ...

  8. Python+Selenium定位元素的方法

    Python+Selenium有以下八种定位元素的方法: 1. find_element_by_id() eg: find_element_by_id("kw") 2. find_ ...

  9. Tomcat配置自定义访问日志 --- 获取请求头部信息

    使用tomcat,搭建完个人网站后,默认记录来访游客的信息是十分有限的,主要有ip和路径以及方法等. 有时候为了获取更多来访信息,比如请求的头部信息,这个时候就需要我们手动配置log了. 开始 进入T ...

  10. 【c#文档】在 C# 中,(int) ,Int32.Parse() 和 Convert.toInt32() 三种方法的区别

    [c#文档]https://msdn.microsoft.com/zh-cn/library/system.convert.toint32.aspx 转载自:http://www.cnblogs.co ...