双休或者放假期间,我就适合不工作然后学点自己想学的、感兴趣的。[捂脸]
目录
- 1. map()
- 2. filter()
- 3. 异常机制
- 4. 文件读写
- 4.1 常见的打开方式
- 4.2 中文乱码问题
- 4.3 f.write()与f.writelines()
- 4.4 f.read()、f.readline()和f.readlines()
- 4.5 csv文件读写
- 5. os模块
- 6. 模块和包
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]
- 如果直接用list相乘,是对list中的元素重复,而不是进行映射;
- 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语句,但处理方式有很多,比如:
- try–多个except:
- try–except–else:
如果try没有异常,则执行else,如果try异常,则执行except,不再执行else。 - 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
在爬虫过程中往往会遇到连接错误,程序就会终止,上面就是解决这种问题的方法。
- return语句
一般不要将return语句放到try、except、else、finally块中,可能会出错,建议放到最后。
4. 文件读写
我知道的不再赘述。
4.1 常见的打开方式
w:文件存在会重写内容;a:文件存在会在末尾追加内容。
4.2 中文乱码问题
如果有中文,打开文件时要加上 encoding = ‘utf-8’
4.3 f.write()与f.writelines()
- f.write()只能将字符串写到文件中
- 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()
- f.read()一次读取文件所有内容;
- f.readline()从文件中读取一行内容;
- 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: 汉字拼音转换工具
人类知识真真真浩如烟海,你绝对可以找到自己感兴趣的并且愿意主动去学习的东西!加油。最后万物归于一物,学思维比学知识重要。