[Python笔记 廖雪峰]

# -*- 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')

猜你喜欢

转载自blog.csdn.net/Daisy_fight/article/details/80610435