# -*- coding:utf8 -*-
# 读文件
# 'rb' 二进制文件(如视频图片)
with open(r'E:\test.txt', 'r') as f:
s = f.read()
print(s)
#read() read(size) readline():读取一行 readline():读取全部按行返回list
# 写文件
with open(r'E:\test.txt', 'w') as f:
s = f.write('wo ai pengziqing')
with open(r'E:\test.txt', 'a') as f:
s = f.write('wo ai yezhicheng')
# StringIO和BytesIO是在内存中操作str和bytes的方法
from io import StringIO
f = StringIO()
f.write('hello')
print(f.getvalue())
from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())
# 操作文件和目录
# 查看当前目录的绝对路径:
import os
os.path.abspath('.')
# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
os.path.join('/Users/michael', 'testdir')
# 然后创建一个目录:
os.mkdir('/Users/michael/testdir')
# 删掉一个目录:
os.rmdir('/Users/michael/testdir')
# os.path.join()函数,把两个路径合成一个时,不要直接拼字符串
# os.path.split()函数,可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名
os.path.split('/Users/michael/testdir/file.txt')
>>>('/Users/michael/testdir', 'file.txt')
# os.path.splitext()可以直接让你得到文件扩展名,很多时候非常方便
os.path.splitext('/path/to/file.txt')
# 对文件重命名:
os.rename('test.txt', 'test.py')
# 删掉文件:
os.remove('test.py')
# 列出当前目录下的所有目录
[x for x in os.listdir('.') if os.path.isdir(x)]
# 列出所有的.py文件
[x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py']
# 序列化:把变量从内存中变成可存储或传输的过程称之为序列化
# 反序列化:把变量内容从序列化的对象重新读到内存里称之为反序列化
# pickle模块来实现序列化
import pickle
d = dict(name='Bob', age=20, score=88)
pickle.dumps(d)
# pickle.dumps()方法把任意对象序列化成一个bytes
f = open('dump.txt', 'wb')
pickle.dump(d, f)
f.close()
# 用pickle.loads()方法反序列化出对象,也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象
f = open('dump.txt', 'rb')
d = pickle.load(f)
f.close()
# json:把对象序列化为标准格式
import json
d = dict(name='Bob', age=20, score=88)
json.dumps(d)
# 用loads()或者对应的load()方法,前者把JSON的字符串反序列化,后者从file-like Object中读取字符串并反序列化
# 序列化类实例
def student2dict(std): # 先把实例用一个转换函数转换
return {
'name': std.name,
'age': std.age,
'score': std.score
}
print(json.dumps(s, default=student2dict)) # default就是把任意一个对象变成一个可序列为JSON的对象
# 获取当前日期和时间
from datetime import datetime
now = datetime.now() # 获取当前datetime
print(now)
# 获取指定日期和时间
from datetime import datetime
dt = datetime(2015, 4, 19, 12, 20) # 用指定日期时间创建datetime
print(dt)
# str转换为datetime
from datetime import datetime
cday = datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
print(cday)
# datetime转换为str
from datetime import datetime
now = datetime.now()
print(now.strftime('%a, %b %d %H:%M'))
# urllib
from urllib import request
with request.urlopen('https://api.douban.com/v2/book/2129650') as f:
data = f.read()
print('Status:', f.status, f.reason)
for k, v in f.getheaders():
print('%s: %s' % (k, v))
print('Data:', data.decode('utf-8'))
# 利用urllib读取JSON,然后将JSON解析为Python对象
from urllib import request
import json
def fetch_data(url):
with request.urlopen(url) as f:
data = f.read()
return json.loads(data)
# 操作图像
from PIL import Image
# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 获得图像尺寸:
w, h = im.size
print('Original image size: %sx%s' % (w, h))
# 缩放到50%:
im.thumbnail((w//2, h//2))
print('Resize image to: %sx%s' % (w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
im.save('thumbnail.jpg', 'jpeg')
from PIL import Image, ImageFilter
# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 应用模糊滤镜:
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg', 'jpeg')
# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 获得图像尺寸:
w, h = im.size
print('Original image size: %sx%s' % (w, h))
# 缩放到50%:
im.thumbnail((w//2, h//2))
print('Resize image to: %sx%s' % (w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
im.save('thumbnail.jpg', 'jpeg')
from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random
# 随机字母:
def rndChar():
return chr(random.randint(65, 90))
# 随机颜色1:
def rndColor():
return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
# 随机颜色2:
def rndColor2():
return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))
# 240 x 60:
width = 60 * 4
height = 60
image = Image.new('RGB', (width, height), (255, 255, 255))
# 创建Font对象:
font = ImageFont.truetype('Arial.ttf', 36)
# 创建Draw对象:
draw = ImageDraw.Draw(image)
# 填充每个像素:
for x in range(width):
for y in range(height):
draw.point((x, y), fill=rndColor())
# 输出文字:
for t in range(4):
draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
# 模糊:
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')