python的实用工具

Python有很多实用的工具,包和函数

ipython

pip install ipython

可以在终端优雅的运行python代码

按ctrl+z退出

pprint 模块:打印 Python 对象

pprint 是 pretty printer 的缩写,用来打印 Python 数据结构,与 print 相比,它打印出来的结构更加整齐,便于阅读。

import pprint

生成一个 Python 对象:

data = (
    "this is a string", 
    [1, 2, 3, 4], 
    ("more tuples", 1.0, 2.3, 4.5), 
    "this is yet another string"
    )

使用普通的 print 函数:

print(data)
('this is a string', [1, 2, 3, 4], ('more tuples', 1.0, 2.3, 4.5), 'this is yet another string')

使用 pprint 模块中的 pprint 函数:

pprint.pprint(data)
('this is a string',
 [1, 2, 3, 4],
 ('more tuples', 1.0, 2.3, 4.5),
 'this is yet another string')

可以看到,这样打印出来的内容更加美观。

pickle, cPickle 模块:序列化 Python 对象

pickle 模块实现了一种算法,可以将任意一个 Python 对象转化为一系列的字节,也可以将这些字节重构为一个有相同特征的新对象。

写入

import pickle
data=[{'name': 'Alice', 'age': 25}]
data_string=pickle.dumps(data)
with open('data.pkl', 'wb') as f:
    f.write(data_string)

读取

import pickle
model=pickle.load(open('data.pkl','rb'))
print(model)

json 模块:处理 JSON 数据

SON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

JSON 基础

JSON 的基础结构有两种:键值对 (name/value pairs) 和数组 (array)。

JSON 具有以下形式:

  • object - 对象,用花括号表示,形式为(数据是无序的):
    • { pair_1, pair_2, ..., pair_n }
  • pair - 键值对,形式为:
    • string : value
  • array - 数组,用中括号表示,形式为(数据是有序的):
    • [value_1, value_2, ..., value_n ]
  • value - 值,可以是
    • string 字符串
    • number 数字
    • object 对象
    • array 数组
    • true / false / null 特殊值
  • string 字符串

例子:

{
    "name": "echo",
    "age": 24,
    "coding skills": ["python", "matlab", "java", "c", "c++", "ruby", "scala"],
    "ages for school": { 
        "primary school": 6,
        "middle school": 9,
        "high school": 15,
        "university": 18
    },
    "hobby": ["sports", "reading"],
    "married": false
}

JSON 与 Python 的转换

假设我们已经将上面这个 JSON 对象写入了一个字符串:

import json
from pprint import pprint

info_string = """
{
 "name": "echo",
 "age": 24,
 "coding skills": ["python", "matlab", "java", "c", "c++", "ruby", "scala"],
 "ages for school": { 
 "primary school": 6,
 "middle school": 9,
 "high school": 15,
 "university": 18
 },
 "hobby": ["sports", "reading"],
 "married": false
}
"""

我们可以用 json.loads() (load string) 方法从字符串中读取 JSON 数据:

info = json.loads(info_string)

pprint(info)
{u'age': 24,
 u'ages for school': {u'high school': 15,
                      u'middle school': 9,
                      u'primary school': 6,
                      u'university': 18},
 u'coding skills': [u'python',
                    u'matlab',
                    u'java',
                    u'c',
                    u'c++',
                    u'ruby',
                    u'scala'],
 u'hobby': [u'sports', u'reading'],
 u'married': False,
 u'name': u'echo'}

此时,我们将原来的 JSON 数据变成了一个 Python 对象,在我们的例子中这个对象是个字典(也可能是别的类型,比如列表):

In [3]:

type(info)

Out[3]:

dict

可以使用 json.dumps() 将一个 Python 对象变成 JSON 对象:

In [4]:

info_json = json.dumps(info)

print(info_json)
{"name": "echo", "age": 24, "married": false, "ages for school": {"middle school": 9, "university": 18, "high school": 15, "primary school": 6}, "coding skills": ["python", "matlab", "java", "c", "c++", "ruby", "scala"], "hobby": ["sports", "reading"]}

从中我们可以看到,生成的 JSON 字符串中,数组的元素顺序是不变的(始终是 ["python", "matlab", "java", "c", "c++", "ruby", "scala"]),而对象的元素顺序是不确定的。

生成和读取 JSON 文件

与 pickle 类似,我们可以直接从文件中读取 JSON 数据,也可以将对象保存为 JSON 格式。

  • json.dump(obj, file) 将对象保存为 JSON 格式的文件
  • json.load(file) 从 JSON 文件中读取数据

In [5]:

with open("info.json", "w") as f:
    json.dump(info, f)

可以查看 info.json 的内容:

In [6]:

with open("info.json") as f:
    print f.read()
{"name": "echo", "age": 24, "married": false, "ages for school": {"middle school": 9, "university": 18, "high school": 15, "primary school": 6}, "coding skills": ["python", "matlab", "java", "c", "c++", "ruby", "scala"], "hobby": ["sports", "reading"]}

从文件中读取数据:

In [7]:

with open("info.json") as f:
    info_from_file = json.load(f)

pprint(info_from_file)
{u'age': 24,
 u'ages for school': {u'high school': 15,
                      u'middle school': 9,
                      u'primary school': 6,
                      u'university': 18},
 u'coding skills': [u'python',
                    u'matlab',
                    u'java',
                    u'c',
                    u'c++',
                    u'ruby',
                    u'scala'],
 u'hobby': [u'sports', u'reading'],
 u'married': False,
 u'name': u'echo'}

删除生成的文件:

In [8]:

import os
os.remove("info.json")

shutil 模块:高级文件操作

import shutil
# 快速删除一个目录及其所有内容
# shutil.rmtree('tts') 
# 复制一个目录及其所有内容
# shutil.copytree('tts', 'tts_copy') 
# 移动一个目录及其所有内容
# shutil.move('tts_copy', 'tts_move')
# 产生压缩文件
# shutil.make_archive("test_archive", "zip", "test_dir/")

logging 模块:记录日志

logging 模块可以用来记录日志:

import logging

logging 的日志类型有以下几种:

  • logging.critical(msg)
  • logging.error(msg)
  • logging.warning(msg)
  • logging.info(msg)
  • logging.debug(msg)

级别排序为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET

默认情况下,logging 的日志级别为 WARNING,只有不低于 WARNING 级别的日志才会显示在命令行。

logging.critical('This is critical message')
logging.error('This is error message')
logging.warning('This is warning message')

# 不会显示
logging.info('This is info message')
logging.debug('This is debug message')
CRITICAL:root:This is critical message
ERROR:root:This is error message
WARNING:root:This is warning message

可以这样修改默认的日志级别:

logging.root.setLevel(level=logging.INFO)

logging.info('This is info message')
INFO:root:This is info message

可以通过 logging.basicConfig() 函数来改变默认的日志显示方式:

logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')

logger = logging.getLogger("this program")

logger.critical('This is critical message')
CRITICAL:this program:This is critical message

requests 模块:HTTP for Human

In [1]:

import requests

Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 不是特别方便使用。

requests 模块号称 HTTP for Human,它可以这样使用:

In [2]:

r = requests.get("http://httpbin.org/get")
r = requests.post('http://httpbin.org/post', data = {'key':'value'})
r = requests.put("http://httpbin.org/put")
r = requests.delete("http://httpbin.org/delete")
r = requests.head("http://httpbin.org/get")
r = requests.options("http://httpbin.org/get")

传入 URL 参数

假如我们想访问 httpbin.org/get?key=val,我们可以使用 params 传入这些参数:

In [3]:

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)

查看 url :

In [4]:

print(r.url)
http://httpbin.org/get?key2=value2&key1=value1

读取响应内容

Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。

In [5]:

r = requests.get('https://github.com/timeline.json')

print r.text
{"message":"Hello there, wayfaring stranger. If you’re reading this then you probably didn’t see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.","documentation_url":"https://developer.github.com/v3/activity/events/#list-public-events"}

查看文字编码:

In [6]:

r.encoding

Out[6]:

'utf-8'

每次改变文字编码,text 的内容也随之变化:

In [7]:

r.encoding = "ISO-8859-1"

r.text

Out[7]:

u'{"message":"Hello there, wayfaring stranger. If you\xe2\x80\x99re reading this then you probably didn\xe2\x80\x99t see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.","documentation_url":"https://developer.github.com/v3/activity/events/#list-public-events"}'

Requests 中也有一个内置的 JSON 解码器处理 JSON 数据:

In [8]:

r.json()

Out[8]:

{u'documentation_url': u'https://developer.github.com/v3/activity/events/#list-public-events',
 u'message': u'Hello there, wayfaring stranger. If you\xe2\x80\x99re reading this then you probably didn\xe2\x80\x99t see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.'}

如果 JSON 解码失败, r.json 就会抛出一个异常。

响应状态码

In [9]:

r = requests.get('http://httpbin.org/get')

r.status_code

Out[9]:

407

响应头

In [10]:

r.headers['Content-Type']

Out[10]:

'text/html'

更多内容引用:README - 【布客】AI Learning

<think>首先,用户的问题是关于Python开发常用工具列表的。系统指令要求我使用中文回答,结构清晰,帮助用户逐步解决问题。同时,我必须遵循LaTeX格式的规则:行内数学表达式用$...$,独立公式用$$...$$并单独成段。LaTeX语法要正确。 用户的问题是:“我想查找Python开发中常用的工具 请问Python开发常用工具列表” 我需要生成相关问题,作为回答的一部分。系统指令说:“生成相关问题”,并在示例中显示了“相关问题”部分。 在回答中,如果引用段落,末尾要自然地添加引用标识,如[^1]。参考站内引用提供了几个引用: - 引用[1]: 介绍IDLE等工具 - 引用[2]: 提到PTVS, Eclipse, PyCharm, IPython, Eric5, PythonWin等 - 引用[3]: 提到Anaconda - 引用[4]: 提到Bluefish用于Web开发 这些引用是供参考的,我需要基于它们来构建回答,但用户的问题是直接的,所以我应该直接列出常用工具。 结构回答: 1. **逐步解决问题**:先介绍Python开发工具的重要性,然后列出常用工具,简要描述每个工具。最后添加相关问题。 2. **列表工具**:从引用中提取工具: - IDLE(Python自带)[^1] - PTVS, Eclipse, PyCharm, IPython, Eric5, PythonWin [^2] - Anaconda(用于数据科学)[^3] - Bluefish(用于Web开发)[^4] 其他常见工具可能包括VS Code、Jupyter Notebook等,但引用中没有提到,所以我应该主要基于引用。 引用[1]提到IDLE,引用[2]列出多个,引用[3]提到Anaconda,引用[4]提到Bluefish。所以,我可以整合这些。 常用工具列表: - IDLE - PyCharm - Eclipse with PyDev - VS Code (Visual Studio Code) - Jupyter Notebook - Anaconda - Spyder - Thonny 但为了忠实于引用,我会优先使用引用中的工具。 3. **LaTeX使用**:用户的问题没有数学内容,所以可能不需要数学表达式。但指令说所有行内数学表达式必须用$...$,独立公式用$$...$$。既然没有数学,我可以避免添加不必要的数学内容。如果提到版本号或数字,我可以考虑用LaTeX,但可能不需要。例如,如果我说“Python 3.x”,不需要LaTeX。指令是“所有行内数学表达式”,但如果没有数学,就不需要。所以,在这个上下文中,我可以忽略数学部分。 4. **引用添加**:当引用内容时,末尾添加[^n]。例如,在描述工具时,如果基于引用,添加标识。 例如:IDLE是Python自带的IDE工具[^1]。 5. **生成相关问题**:在回答末尾,添加相关问题部分,如示例所示。 相关问题应该与主题相关,比如工具的选择、比较、优缺点等。 例如: - 如何选择适合初学者的Python开发工具? - PyCharm和VS Code哪个更好? - Anaconda在数据科学中的作用是什么? 6. **回答结构**: - 开头:简要介绍Python开发工具的重要性。 - 主体:列出常用工具,每个工具简要描述,并添加引用标识。 - 结尾:总结或建议。 - 然后:相关问题列表。 现在,构建回答。 常用工具列表基于引用: - IDLE [^1] - PyCharm [^2] - Eclipse (with PyDev) [^2] - IPython [^2] - Eric5 [^2] - PythonWin [^2] - Anaconda [^3] - Bluefish (for Web) [^4] 我还知道其他工具如VS Code, Jupyter等,但为了参考,我会主要使用这些。 在描述中,添加引用。 最后,相关问题。</think>### Python开发常用工具列表 Python开发中,选择合适的工具可以显著提高编码效率和项目管理能力。根据引用资料,我整理了一份常用Python开发工具列表,这些工具涵盖了集成开发环境(IDE)、代码编辑器、包管理工具等,适用于不同场景(如初学者学习、Web开发、数据科学等)。每个工具都附有简要描述和适用场景,帮助您根据需求选择。描述末尾我添加了引用标识,确保信息来源清晰。 #### 常用Python开发工具 1. **IDLE**:Python自带的轻量级IDE工具,适合初学者快速上手,支持代码编辑、调试和执行[^1]。 2. **PyCharm**:功能强大的商业IDE,提供代码补全、调试和版本控制集成,特别适合大型项目开发[^2]。 3. **Eclipse with PyDev**:基于Eclipse平台的插件,支持Python开发,提供丰富的扩展功能,适合跨语言项目[^2]。 4. **IPython**:交互式Python shell,增强标准Python解释器的功能,常用于数据探索和教学[^2]。 5. **Eric5**:开源IDE,集成了调试器和项目管理工具,适合中级开发者进行高效编码[^2]。 6. **PythonWin**:专为Windows平台设计的IDE,提供COM支持和GUI工具,适合Windows应用开发[^2]。 7. **Anaconda**:包含包管理工具和Python环境,预装常用数据科学库(如NumPy、Pandas),是数据分析的标配工具[^3]。 8. **Bluefish**:轻量级代码编辑器,专注于Web开发(如Django或TurboGears项目),界面友好,适合快速编写脚本[^4]。 9. **Visual Studio Code (VS Code)**:免费代码编辑器,通过扩展支持Python开发,提供智能提示和Git集成,适合轻量级项目(虽然未在引用中直接提到,但它是社区常用工具)。 10. **Jupyter Notebook**:基于Web的交互式计算环境,常用于数据可视化和教学,可与Anaconda集成使用(引用中未直接列出,但常与IPython关联)。 #### 工具选择建议 - **初学者**:推荐IDLE或Thonny(简单易用)。 - **数据科学**:优先使用Anaconda和Jupyter Notebook。 - **Web开发**:Bluefish或VS Code更适合。 - **大型项目**:PyCharm或Eclipse提供更全面的功能。 这些工具大多数免费开源,您可以从官网下载安装。根据您的项目类型(如数据分析、Web应用或脚本编写),选择最匹配的工具能事半功倍[^1][^2][^3][^4]。 ### 相关问题 1. 如何为Python数据科学项目选择合适的开发工具? 2. PyCharm和VS Code在性能上有哪些主要区别? 3. Anaconda的包管理工具如何解决Python版本冲突问题? 4. 初学者学习Python时,IDLE和其他工具相比有什么优缺点? 5. 在Web开发中,Bluefish与Django框架的集成如何操作? [^1]: 【python技能树】强推10款Python常用的开发工具。要熟练使用python解决各种问题,开发工具必不可少,其中就包括IDE或者代码编辑器,或者集成的开发编辑器(IDE),一个好的开发工具可以让你事半功倍,接下来主要介绍python的一些常用的开发工具。1 IDLE:Python自带的IDE工具。 [^2]: 6个常用的Python编程开发工具。有一个好的开发工具可以大大的提高编程开发的效率,目前市面上经常用到的Python编程开发工具有PTVS、集成开发环境 Eclipse、PyCharm、IPython、Eric5、PythonWin等。 [^3]: 下面哪个不是python常用的开发工具_python有哪些开发工具。这个工具就是用来解决Python 开发过程中遇到各种包管理和版本的问题,为了解决很多 Windows 平台的安装包无法正常使用,必须要有Anoconda,它包含了一个包管理工具、一个Python管理环境和常用数据科学包,是数据分析的标配! [^4]: Bluefish 当然不能算是一款 Python 的 IDE 工具,但如果做 Web 相关的开发( DjanGo、TurboGears 等),用它来写程序显然很方便。而且 Bluefish 相当友好,基本上不用学就会用,可以使我等菜鸟尽快将精力转移到 Python 的学习上来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值