您的位置:首页 > 其它

基础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)

例:当读到第五行时打印分割线

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)


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: