python的查漏小知识(3)

双休或者放假期间,我就适合不工作然后学点自己想学的、感兴趣的。[捂脸]

1. map()

map()用于对容器中元素进行映射,省掉了遍历这一步,很方便。
在这里插入图片描述

def f(x):
    return x * 2

data = [1, 2]
a = f(data)
print(a)      # [1, 2, 1, 2]

b = map(f, data)
print(b)     # <map object at 0x000001CB0EA3A388>

c = list(map(f, data))
print(c)     # [2, 4]

# 如果要实现map的功能:
d = []
for i in data:
    y = f(i)
    d.append(y)
print(d)          # [2, 4]
  1. 如果直接用list相乘,是对list中的元素重复,而不是进行映射;
  2. map之后形成的是一个map object。如果要变为list还需要进行转换。

2. filter()

filter()用于对容器中的元素进行过滤处理,同样不用去遍历每个元素。
在这里插入图片描述

def f(x):
    return x > 3

data = [2, 5, 6, 9, 3, 2, 1]
a = list(filter(f, data))    
print(a)        # [5, 6, 9]

3. 异常机制

所谓异常机制,就是指程序出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止程序执行。
我一般用try–except语句,但处理方式有很多,比如:

  1. try–多个except:
    在这里插入图片描述
  2. try–except–else:
    如果try没有异常,则执行else,如果try异常,则执行except,不再执行else。
  3. try–except–finally:
    finally无论是否发生异常都会被执行,通常用来释放try中申请的资源。
    在这里插入图片描述
    with代码块执行完毕后自动还原进入该代码之前的状态,总能保证资源正常释放。
with open('test.txt', 'r') as f:
	for line in f.readlines():
		print(line)

只能一个try,可以多个except 加上不同的异常类型,如果都是except会报错。一般不知道自己会犯什么错,我一般只写except,没有写紧跟着的异常类型,就不能用多个except,我用了判断语句,这样程序就会很笨重,但暂时想不到更好的方法,如果有好的方法麻烦踢我。

try:
    	content_ = html.xpath('//div[@id = "content"]/p/text()')
except:
        content_ = []
if content_ == []:
    try:
        content_ = html.xpath('//*[@id="chaptercontent"]/text()')
    except:
        content_ = []
if content_ == []:
	try:
		pass
	except:
		pass

还有将while循环、break、continue与try–except合用的

def getHtml(url):
    headers = {'User-Agent': 'Mozilla/5.0 ...', 'Connection':'close'}
    while 1:
        try:
            html = requests.get(url, headers = headers)
            break
        except requests.exceptions.ConnectionError:
            time.sleep(5)
            continue
    html.encoding = html.apparent_encoding
    return html.text

在爬虫过程中往往会遇到连接错误,程序就会终止,上面就是解决这种问题的方法。

  1. return语句
    一般不要将return语句放到try、except、else、finally块中,可能会出错,建议放到最后。

4. 文件读写

我知道的不再赘述。

4.1 常见的打开方式

w:文件存在会重写内容;a:文件存在会在末尾追加内容。
在这里插入图片描述

4.2 中文乱码问题

在这里插入图片描述
如果有中文,打开文件时要加上 encoding = ‘utf-8’

4.3 f.write()与f.writelines()

  1. f.write()只能将字符串写到文件中
  2. f.writelines()把字符串列表写入,但是不会转行,如果需要换行,要添加换行符。
with open('school/bookcontent/result2/a.txt', 'w', encoding='utf-8') as f:
    s = ['xiaoxi', 'xiaoming']
    f.write(s)    # TypeError: write() argument must be str, not list

with open('school/bookcontent/result2/a.txt', 'w', encoding='utf-8') as f:
    s = ['xiaoxi', 'xiaoming']
    f.writelines(s)      # xiaoxixiaoming

with open('school/bookcontent/result2/a.txt', 'w', encoding='utf-8') as f:
    s = ['xiaoxi\n', 'xiaoming\n']
    f.writelines(s)   
>>> xiaoxi
    xiaoming

4.4 f.read()、f.readline()和f.readlines()

  1. f.read()一次读取文件所有内容;
  2. f.readline()从文件中读取一行内容;
  3. f.readlines()把文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回。
with open('school/bookcontent/result2/a.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)
>>> xiaoxi  
    xiaoming

with open('school/bookcontent/result2/a.txt', 'r', encoding='utf-8') as f:
    content = f.readline()
    print(content)
>>> xiaoxi

with open('school/bookcontent/result2/a.txt', 'r', encoding='utf-8') as f:
    content = f.readlines()
    print(content)
>>>['xiaoxi\n', 'xiaoming\n']

现在知道为啥用f.readlines()读取文件内容后,要用strip(’\n’)去掉换行符了。

4.5 csv文件读写

我一般用pandas中的pd.read_csv(),但还可以用csv包。

5. os模块

os模块可以帮助我们直接对操作系统进行操作,调用文件、命令等。我总结一些我自己常用的吧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 模块和包

在这里插入图片描述
在这里插入图片描述
常用库列表:
Pypingyin: 汉字拼音转换工具
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
人类知识真真真浩如烟海,你绝对可以找到自己感兴趣的并且愿意主动去学习的东西!加油。最后万物归于一物,学思维比学知识重要。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值