基础3
2016-08-09 22:57
239 查看
一.集合set
列表转换为集合a =[1,2,3] set1 = set(a)
2.差集 - 取list1有,但是list2里没有的元素
list1.difference(list2)
3.并集 | 将list1与list2合并,并去重
list1.union(list2)
4.交集& 取出list1与list2中相同的元素,并去重
list1.intersection(list2) == list1 & list2
5.判断list1是不是list2的子集
list1.issubset(list2)
6.判断list1是不是list2的父集
list1.issuperset(list2)
7.对称差集^ 剔除list1与list2中都有的元素,形成新的集合
list1.symmetric_difference(list2)
8.添加元素 .add 无序添加
list1.add(99)
9.添加多个元素 .update
llist1.update([1,2,3])
10.删除元素remove与discard
list1.remove(1) 1若不存在会报错
list1.discard(1) 1若不存在不会报错,返回None
11.删除任意元素
list1.pop()括号中不加元素
二、文件操作
1.read() 一次将全部内容读到内存里
readline() 一次读取一行
readlines() 一次读取全部内容到内存,形成一个列表
2.模式
r:只读,文件不存在则报错
r+:可读可写,文件不存在则报错,默认光标指针在文件开始,所以进行写操作的时候回覆盖前边的内容
w:只写,不能读取内容,打开文件时,若文件存在会清空源文件,文件不存在则创建;
w+:基本不用。可读可写,文件存在会清空源文件,文件不存在则创建
a:追加,不能读取内容,在文件最后追加内容
a+:可读可写,在文件最后追加内容
rb:以二进制模式来读文件,打开文件的时候不要加encoding='utf-8',在网络传输socket中只能用二进制模式传输文件
U:在读取文件时,将\r \n \r\n 统一转换为\n(必须与r或r+模式同时使用才行)
出现乱码的原因:
close之前,手动打开文件,什么都没写入;close后,手动打开文件,乱码:123嚅?
原因分析:指针问题。open()以a+模式开启了一个附加读写模式的文件,由于是a,所以指针在文件末尾。此时如果做read(),则Python发现指针位置就是EOF,读取到空字符串。
在写入123之后,指针的位置是4,仍然是文件尾,文件在内存中是123[EOF]。
但看起来read()的时候,Python仍然去试图在磁盘的文件上,将指针从文件头向后跳3,再去读取到EOF为止。
也就是说,你实际上是跳过了该文件真正的EOF,为硬盘底层的数据做了一个dump,一直dump到了一个从前存盘文件的[EOF]为止。所以最后得到了一些根本不期待的随机乱字符,而不是编码问题造成的乱码。
解决方案:读取之前将指针重置为文件头(如果读取之后重置再读,无效)
三、文件读取
1.文件读取最高效的方式,文件一行行读进内存,省内存。
with open("kk.log","r",encoding="utf-8") as f:
for line in f:
print(line)
例:当读到第五行时打印分割线
输出:adsdsd
wqwqwqq
wqwqwwq
wsqwqw
----------
2.指针
f.tell() 找到当前指针的位置,位置数是按字符个数来计算的
f.seek(0) 将指针移到指定位置,0是开始,一般草做文件时,读之前加个seek(0)
f.fileno() 操作系统文件IO调用的接口号
f.seekable(文件名) 判断文件指针是否可移
f.readable(文件名) 判断文件是否可读,可读返回True
f.writeable(文件名) 判断文件是否可写
f.flush() 将写的内容从缓存写到文件中
例:标准输出(所谓标准输出即是屏幕;标准输入是键盘)显示进度条
f.truncate() 截断 括号内不写数字,会把文件清空;如果写了数字,会把该位置后边的内容清空,数字是字符数,代表指针位置。
3.批量字符串替换
4.字符串转换为字典
b = "{key1:value1}" b是字符串,不是字典
b = eval(b)就会将b转换为字典
b = {key1:value1}
四、从屏幕获取多行输入
列表转换为集合a =[1,2,3] set1 = set(a)
2.差集 - 取list1有,但是list2里没有的元素
list1.difference(list2)
3.并集 | 将list1与list2合并,并去重
list1.union(list2)
4.交集& 取出list1与list2中相同的元素,并去重
list1.intersection(list2) == list1 & list2
5.判断list1是不是list2的子集
list1.issubset(list2)
6.判断list1是不是list2的父集
list1.issuperset(list2)
7.对称差集^ 剔除list1与list2中都有的元素,形成新的集合
list1.symmetric_difference(list2)
8.添加元素 .add 无序添加
list1.add(99)
9.添加多个元素 .update
llist1.update([1,2,3])
10.删除元素remove与discard
list1.remove(1) 1若不存在会报错
list1.discard(1) 1若不存在不会报错,返回None
11.删除任意元素
list1.pop()括号中不加元素
二、文件操作
1.read() 一次将全部内容读到内存里
readline() 一次读取一行
readlines() 一次读取全部内容到内存,形成一个列表
2.模式
r:只读,文件不存在则报错
r+:可读可写,文件不存在则报错,默认光标指针在文件开始,所以进行写操作的时候回覆盖前边的内容
w:只写,不能读取内容,打开文件时,若文件存在会清空源文件,文件不存在则创建;
w+:基本不用。可读可写,文件存在会清空源文件,文件不存在则创建
a:追加,不能读取内容,在文件最后追加内容
a+:可读可写,在文件最后追加内容
rb:以二进制模式来读文件,打开文件的时候不要加encoding='utf-8',在网络传输socket中只能用二进制模式传输文件
U:在读取文件时,将\r \n \r\n 统一转换为\n(必须与r或r+模式同时使用才行)
出现乱码的原因:
close之前,手动打开文件,什么都没写入;close后,手动打开文件,乱码:123嚅?
原因分析:指针问题。open()以a+模式开启了一个附加读写模式的文件,由于是a,所以指针在文件末尾。此时如果做read(),则Python发现指针位置就是EOF,读取到空字符串。
在写入123之后,指针的位置是4,仍然是文件尾,文件在内存中是123[EOF]。
但看起来read()的时候,Python仍然去试图在磁盘的文件上,将指针从文件头向后跳3,再去读取到EOF为止。
也就是说,你实际上是跳过了该文件真正的EOF,为硬盘底层的数据做了一个dump,一直dump到了一个从前存盘文件的[EOF]为止。所以最后得到了一些根本不期待的随机乱字符,而不是编码问题造成的乱码。
解决方案:读取之前将指针重置为文件头(如果读取之后重置再读,无效)
三、文件读取
1.文件读取最高效的方式,文件一行行读进内存,省内存。
with open("kk.log","r",encoding="utf-8") as f:
for line in f:
print(line)
例:当读到第五行时打印分割线
count = 0 with open("ss","r",encoding="utf-8") as f: for line in f: if count == 5: print("i m _____") count += 1 continue print(line) count += 1
输出:adsdsd
wqwqwqq
wqwqwwq
wsqwqw
----------
2.指针
f.tell() 找到当前指针的位置,位置数是按字符个数来计算的
f.seek(0) 将指针移到指定位置,0是开始,一般草做文件时,读之前加个seek(0)
f.fileno() 操作系统文件IO调用的接口号
f.seekable(文件名) 判断文件指针是否可移
f.readable(文件名) 判断文件是否可读,可读返回True
f.writeable(文件名) 判断文件是否可写
f.flush() 将写的内容从缓存写到文件中
例:标准输出(所谓标准输出即是屏幕;标准输入是键盘)显示进度条
import sys, time for i in range(20) sys.stdout.write("#") sys.stdout.flish() time.sleep(1)
f.truncate() 截断 括号内不写数字,会把文件清空;如果写了数字,会把该位置后边的内容清空,数字是字符数,代表指针位置。
3.批量字符串替换
with open("old.log","r",encoding="utf-8") as f ,open("new.log","w",encoding="utf-8") as f_new: for line in f: if "我是中国人" in line: line = line.replace("我是中国人","他是美国人") #str.replace("old","new")字符串替换 f_new.write(line) f_new.write(line)
4.字符串转换为字典
b = "{key1:value1}" b是字符串,不是字典
b = eval(b)就会将b转换为字典
b = {key1:value1}
四、从屏幕获取多行输入
# 获取多行输入 stopword = '' name = '' print("请输入新的配置:\n") for line in iter(input, stopword): line = line.strip() name += line print("已经添加新配置:%s\n" %name)
相关文章推荐
- Android下拉刷新上拉加载控件,对所有View通用
- HTML5新标签 | 说明
- 使用windeployqt.exe进行依赖查找打包
- 2.文件系统
- LLVM和Clang背后的故事
- UVA11384 Help is needed for Dexter (递归、找规律)
- 构造代码块与静态代码块的调用时机
- Java Observer 观察者
- Selenium 3 -how to locate the chromedriver and geckodriver place?
- JavaWeb---ServletContext
- Cheapest Palindrome(区间dp)
- 驱动学习
- [LeetCode]--295. Find Median from Data Stream(Max-Heap & Min-Heap)
- 组合数学 组合数 卡特兰数 斯特林数
- Struts1的执行过程
- mysql base
- 基本数据类型double和封装类型Double引起的bug
- lesson6:jmeter和badboy配合使用
- 关于RandomizedSearchCV 和GridSearchCV(区别:参数个数的选择方式)
- hibernate一级缓存和二级缓存的区别