1.range(x,y)

[x,y)

>>> range(0,4) #0,1,2,3
>>> range(1,4) #1,2,3

2.dics

  • dics.get(key, default=None)

当key在dics中不存在时返回default的值,返回一个函数也是可以的

>>> dics = {
0 : 'a',
1 : 'b',
2 : 'c'
}
>>> dics.get(1, 'not found')
'b'
>>> dics.get(4, 'not found')
'not found'
  • 判断key在dic中是否存在

两种方法

__contains__('key')

'key' in d.keys()

>>> d = {'name':'jack', 'sex':1, 'age':33}
>>> d
{'name': 'jack', 'sex': 1, 'age': 33} >>> d.__contains__('name')
True >>> 'name' in d.keys()
True
  • foreach一个dic
j = {'key1' : 'value1', 'key2' : 'value2'}
for key, value in j.items(): # items()中每一项都是 tuple 类型,这里的key和value不是特定的关键字
print(key)
print(value) # key1
# value1
# key2
# value2

单独循环key或者values

for k in j.keys():
print(k) for v in j.values():
print(v)

3.读写文件

python中文件被分为两种,text or binary

  • text

读到的字符串经过了编码

每一行都以EOL(End of Line)结尾

\n on Unix

\r\n on Windows

在写入的字符串中加入'\n'会自动换行

  • binary

在mode后加上'b'

二进制方式读写文件

基本流程

  1. open

  2. write | read

  3. close

with 相当于 using,自动close()

# mode r w a(append) r+(read and write)
with open('filepath','mode', encoding = 'utf-8') as file:
file.write('aaa')
file.read(size) # 读size个字符或byte
file.readline() # from_what 0 (default)beginning of the file
# 1 current file position
# 2 end of file
file.seek(offset, from_what) file.readlines()

写json

import json
with open('filepath', 'w', encoding = 'utf-8') as file:
data = json.dumps(u'data', ensure_ascii = False)
file.write(unicode(data))

python的json库只能序列化python的内置类型,如果是自定义的数据结构无法使用json.dumps序列化

可以使用jsonpickle

import jsonpickle

class Thing(object):
def __init__(self, name):
self.name = name obj = Thing('Awesome') jsn = jsonpickle.encode(obj) # 序列化,会带上类型信息用于反序列化 jsonpickle.decode(jsn) # 反序列化 jsn = jsonpickle.encode(obj, unpicklable=False) #序列化,不带类型信息

4. 判断某个class是否存在某个attribute

hasattr(class_a, 'attribute')

5. 判断某个变量是否是list

a = [1, 2, 3]
if isinstance(a, list):
print('a is a list')

6. list.append(),引用传递

li.append(a)之后对a进行修改,li中的数据也会改变

此时的a与li[0]指向同一块内存

>>> import scrapy
>>>
>>> class A(scrapy.Item):
... post_id = scrapy.Field()
... author_id = scrapy.Field()
>>>
>>> a = A(post_id = "post_id_1", author_id = "author_id_1")
>>> li = []
>>> li.append(a)
>>> print(li)
[{'author_id': 'author_id_1', 'post_id': 'post_id_1'}]
>>> a['post_id'] = 'post_id_2'
>>> print(li)
[{'author_id': 'author_id_1', 'post_id': 'post_id_2'}]

Reference

  1. jsonpickle Documentation

[Python] Python 学习记录(2)的更多相关文章

  1. Python爬虫学习记录【内附代码、详细步骤】

    引言: 昨天在网易云课堂自学了<Python网络爬虫实战>,视频链接 老师讲的很清晰,跟着实践一遍就能掌握爬虫基础了,强烈推荐! 另外,在网上看到一位学友整理的课程记录,非常详细,可以优先 ...

  2. python爬虫学习记录

    爬虫基础 urllib,urllib2,re都是python自带的模块 urllib,urllib2区别是urllib2可以接受一个Request类的实例来设置url请求的headers,即可以模拟浏 ...

  3. 简明 Python 教程--学习记录

    注意,我们在print语句的结尾使用了一个 逗号 来消除每个print语句自动打印的换行符.这样做有点难看,不过确实简单有效. print # prints a blank line 注意,没有返回值 ...

  4. python numpy学习记录

    numpy是一个python和矩阵相关的库,在机器学习中非常有用,记录下numpy的基本用法 numpy的数组类叫做ndarray也叫做数组,跟python标准库中的array.array不同,后者只 ...

  5. python多线程学习记录

    1.多线程的创建 import threading t = t.theading.Thread(target, args--) t.SetDeamon(True)//设置为守护进程 t.start() ...

  6. Python tkinter 学习记录(一) --label 与 button

    最简的形式 from tkinter import * root = Tk() # 创建一个Tk实例 root.wm_title("标题") # 修改标题 root.mainloo ...

  7. Python正则表达式学习记录

    常用的命令: http://www.runoob.com/python/python-reg-expressions.html 使用中相关注意问题: 1. 中括号里的表示从N到M需要用横线‘-’, 而 ...

  8. 流畅的python第一章python数据模型学习记录

    python中有些特殊的方法,以双上下划线开头,并以双下划线结束的方法.如__getitem__,这些方法是特殊的方法,供python解释权内部使用,一般来说不需要调用 还有一种是以双下划线开头的,如 ...

  9. python getopt学习记录

    有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...

  10. python基础学习记录......

    1.IDEA写python 打开IDEA,File--->settings---->Plugins    输入python  安装   重启IDEA 2.新建Project     选择P ...

随机推荐

  1. Codeforces 898 B(拓展欧几里得)

    Proper Nutrition 题意:有n元钱,有2种单价不同的商品,是否存在一种购买方式使得钱恰好花光,如果有输入任意一种方式,如果没有输出“NO” 题解:可以使用拓展欧几里得快速求解. #inc ...

  2. 51nod 1376 最长递增子序列的数量(不是dp哦,线段树 +  思维)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1376 题解:显然这题暴力的方法很容易想到就是以每个数为结尾最 ...

  3. 【Nginx】实现负载均衡的几种方式

    要理解负载均衡,必须先搞清楚正向代理和反向代理. 注: 正向代理,代理的是用户. 反向代理,代理的是服务器 什么是负载均衡 当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能 ...

  4. Maven学习归纳(四)——传递依赖和依赖的规则

    一.传递依赖 官方文档解释的传送门:http://ifeve.com/maven-dependency-mechanism/ 当存在传递依赖的情况时,主工程对间接依赖的jar可以访问吗? 例如:A.j ...

  5. [大数据学习研究]2.利用VirtualBox模拟Linux集群

    1. 在主机Macbook上设置HOST 前文书已经把虚拟机的静态IP地址设置好,以后可以通过ip地址登录了.不过为了方便,还是设置一下,首先在Mac下修改hosts文件,这样在ssh时就不用输入ip ...

  6. ECharts使用总结归纳

    UserNAME:你为什么写这篇文章? My:最近项目中有统计报表的需求,使用了ECharts,“度娘”过程中东查西找太麻烦,自己写一篇加深印象,方便以后查阅. 辅助文档------>ttps: ...

  7. 松软科技课堂:数据库-主键(PrimaryKey)

    主键就是一个表中每个数据行的唯一标识.不会有重复值的列才能当主键.一个表可以没有主键,但是会非常难以处理,因此没有特殊理由表都要设定主键 主键有两种选用策略:业务主键和逻辑主键.业务主键是使用有业务意 ...

  8. Linux环境下进行分布式压测踩过的坑

    背景:公司为了满足大并发的情况,需要测试组配合,就需要分布式压测,这里我把我踩过坑都记录下来: 环境:Linux + jmeter-v.5.1.1;使用3台2核4G的压力机: Q1: Server f ...

  9. 深入理解JVM内存分配策略

    理解JVM内存分配策略 三大原则+担保机制 JVM分配内存机制有三大原则和担保机制 具体如下所示: 优先分配到eden区 大对象,直接进入到老年代 长期存活的对象分配到老年代 空间分配担保 对象优先在 ...

  10. hadoop之hdfs命令详解

    本篇主要对hadoop命令和hdfs命令进行阐述,yarn命令会在之后的文章中体现 hadoop fs命令可以用于其他文件系统,不止是hdfs文件系统内,也就是说该命令的使用范围更广可以用于HDFS. ...