python3文档
Ⅰ 如何使用python3读写INI配置文件
ini文件简介
ini是我们常见到的配置文件格式之一。
ini是微软Windows操作系统中的文件扩展名(也常用在其他系统)。
INI是英文“初始化(Initial)”的缩写。正如该术语所表示的,INI文件被用来对操作系统或特定程序初始化或进行参数设置。
网络
通过它,可以将经常需要改变的参数保存起来(而且还可读),使程序更加的灵活。
我先给出一个ini文件的示例。
[School]
ip = 10.15.40.123
mask = 255.255.255.0
gateway = 10.15.40.1
dns = 211.82.96.1
[Match]
ip = 172.17.29.120
mask = 255.255.255.0
gateway = 172.17.29.1
dns = 0.0.0.0
这个配置文件中保存的是不同场合下的IP设置参数。
下面将以生成和读取这个配置文件为例,进行讲解。
Python(v3)读取方法
首先,Python读取ini配置需要用到ConfigParser包,所以要先加载它。
import configparser
之后我们需要载入配置文件。
config=configparser.ConfigParser()
#IpConfig.ini可以是一个不存在的文件,意味着准备新建配置文件。
config.read("IpConfig.ini")
接下来,我们可以使用configparser.add_section()向配置文件中添加一个Section。
#添加节School
config.add_section("School")
注意:如果文件中已经存在相应的项目,则不能再增加同名的节。
然后可以使用configparser.set()在节School中增加新的参数。
#添加新的IP地址参数
config.set("School","IP","192.168.1.120")
config.set("School","Mask","255.255.255.0")
config.set("School","Gateway","192.168.1.1")
config.set("School","DNS","211.82.96.1")
你可以以同样的方式增加其它几项。
#由于ini文件中可能有同名项,所以做了异常处理
try:
config.add_section("Match")
config.set("Match","IP","172.17.29.120")
config.set("Match","Mask","255.255.255.0")
config.set("Match","Gateway","172.17.29.1")
config.set("Match","DNS","0.0.0.0")
except configparser.DuplicateSectionError:
print("Section 'Match' already exists")
增加完所有需要的项目后,要记得使用configparser.write()进行写入操作。
config.write(open("IpConfig.ini", "w"))
以上就是写入配置文件的过程。
接下来我们使用configparser.get()读取刚才写入配置文件中的参数。读取之前要记得读取ini文件。
ip=config.get("School","IP")
mask=config.get("School","mask")
gateway=config.get("School","Gateway")
dns=config.get("School","DNS")
print((ip,mask+"\n"+gateway,dns))
完整示例
下面是一个完整的示例程序,他将生成一个IpConfig.ini的配置文件,再读取文件中的数据,输出到屏幕上。
# -*- coding: utf-8 -*-
import configparser
#读取配置文件
config=configparser.ConfigParser()
config.read("IpConfig.ini")
#写入宿舍配置文件
try:
config.add_section("School")
config.set("School","IP","10.15.40.123")
config.set("School","Mask","255.255.255.0")
config.set("School","Gateway","10.15.40.1")
config.set("School","DNS","211.82.96.1")
except configparser.DuplicateSectionError:
print("Section 'School' already exists")
#写入比赛配置文件
try:
config.add_section("Match")
config.set("Match","IP","172.17.29.120")
config.set("Match","Mask","255.255.255.0")
config.set("Match","Gateway","172.17.29.1")
config.set("Match","DNS","0.0.0.0")
except configparser.DuplicateSectionError:
print("Section 'Match' already exists")
#写入配置文件
config.write(open("IpConfig.ini", "w"))
ip=config.get("School","IP")
mask=config.get("School","mask")
gateway=config.get("School","Gateway")
dns=config.get("School","DNS")
print((ip,mask+"\n"+gateway,dns))
总结
Python读取ini文件还是十分简单的,这里我给出的只是一些简单的使用方法,如果想用更高级的功能,比如和注释有关的功能。可以参考Pyhton官方文档
对大多数软件开发者而言,术语数据库通常是指RDBMS(关系数据库管理系统), 这些系统使用表格(类似于电子表格的网格),其中行表示记录,列表示记录的字段。表格及其中存放的数据是使用sql (结构化査询语言)编写的语句来创建并操纵的。Python提供了用于操纵SQL数据库的API(应用程序接口),通常与作为标准的SQLite 3数据库一起发布。
另一种数据库是DBM (数据库管理器),其中存放任意数量的键-值项。Python 的标准库提供了几种DBM的接口,包括某些特定于UNIX平台的。DBM的工作方式 与Python中的字典类似,区别在于DBM通常存放于磁盘上而不是内存中,并且其键与值总是bytes对象,并可能受到长度限制。本章第一节中讲解的shelve模块提供了方便的DBM接口,允许我们使用字符串作为键,使用任意(picklable)对象作为值。
如果可用的 DBM 与 SQLite 数据库不够充分,Python Package Index, pypi.python.org/pypi中提供了大量数据库相关的包,包括bsddb DBM ("Berkeley DB"),对象-关系映射器,比如SQLAlchemy (www.sqlalchemy.org),以及流行的客户端/服务器数据的接口,比如 DB2、Informix、Ingres、MySQL、ODBC 以及 PostgreSQL。
本章中,我们将实现某程序的两个版本,该程序用于维护一个DVD列表,并追踪每个DVD的标题、发行年份、时间长度以及发行者。该程序的第一版使用DBM (通过shelve模块)存放其数据,第二版则使用SQLite数据库。两个程序都可以加载与保存简单的XML格式,这使得从某个程序导出DVD数据并将其导入到其他程序成为可能。与DBM版相比,基于SQL的程序提供了更多一些的功能,并且其数据设计也稍干净一些。
12.1 DBM数据库
shelve模块为DBM提供了一个wrapper,借助于此,我们在与DBM交互时,可以将其看做一个字典,这里是假定我们只使用字符串键与picklable值,实际处理时, shelve模块会将键与值转换为bytes对象(或者反过来)。
由于shelve模块使用的是底层的DBM,因此,如果其他计算机上没有同样的DBM,那么在某台计算机上保存的DBM文件在其他机器上无法读取是可能的。为解决这一问题,常见的解决方案是对那些必须在机器之间可传输的文件提供XML导入与导出功能,这也是我们在本节的DVD程序dvds-dbm.py中所做的。
对键,我们使用DVD的标题;对值,则使用元组,其中存放发行者、发行年份以及时间。借助于shelve模块,我们不需要进行任何数据转换,并可以把DBM对象当做一个字典进行处理。
程序在结构上类似于我们前面看到的那种菜单驱动型的程序,因此,这里主要展示的是与DBM程序设计相关的那部分。下面给出的是程序main()函数中的一部分, 忽略了其中菜单处理的部分代码。
db = None
try:
db = shelve.open(filename, protocol=pickle.HIGHEST_PROTOCOL)
finally:
if db is not None:
db.dose()
这里我们已打开(如果不存在就创建)指定的DBM文件,以便于对其进行读写操作。每一项的值使用指定的pickle协议保存为一个pickle,现有的项可以被读取, 即便是使用更底层的协议保存的,因为Python可以计算出用于读取pickle的正确协议。最后,DBM被关闭——其作用是清除DBM的内部缓存,并确保磁盘文件可以反映出已作的任何改变,此外,文件也需要关闭。
该程序提供了用于添加、编辑、列出、移除、导入、导出DVD数据的相应选项。除添加外,我们将忽略大部分用户接口代码,同样是因为已经在其他上下文中进行了展示。
def add_dvd(db):
title = Console.get_string("Title", "title")
if not title:
return
director = Console.get_string("Director", "director")
if not director:
return
year = Console.get_integer("Year", "year",minimum=1896,
maximum=datetime,date.today().year)
ration = Console.get_integer("Duration (minutes)", "minutes“, minimum=0, maximum=60*48)
db[title] = (director, year, ration)
db.sync()
像程序菜单调用的所有函数一样,这一函数也以DBM对象(db)作为其唯一参数。该函数的大部分工作都是获取DVD的详细资料,在倒数第二行,我们将键-值项存储在DBM文件中,DVD的标题作为键,发行者、年份以及时间(由shelve模块pickled在一起)作为值。
为与Python通常的一致性同步,DBM提供了与字典一样的API,因此,除了 shelve.open() 函数(前面已展示)与shelve.Shelf.sync()方法(该方法用于清除shelve的内部缓存,并对磁盘上文件的数据与所做的改变进行同步——这里就是添加一个新项),我们不需要学习任何新语法。
def edit_dvd(db):
old_title = find_dvd(db, "edit")
if old_title is None:
return
title = Console.get.string("Title", "title", old_title)
if not title:
return
director, year, ration = db[old_title]
...
db[title]= (director, year, ration)
if title != old_title:
del db[old_title]
db.sync()
为对某个DVD进行编辑,用户必须首先选择要操作的DVD,也就是获取DVD 的标题,因为标题用作键,值则用于存放其他相关数据。由于必要的功能在其他场合 (比如移除DVD)也需要使用,因此我们将其实现在一个单独的find_dvd()函数中,稍后将査看该函数。如果找到了该DVD,我们就获取用户所做的改变,并使用现有值作为默认值,以便提高交互的速度。(对于这一函数,我们忽略了大部分用户接口代码, 因为其与添加DVD时几乎是相同的。)最后,我们保存数据,就像添加时所做的一样。如果标题未作改变,就重写相关联的值;如果标题已改变,就创建一个新的键-值对, 并且需要删除原始项。
def find_dvd(db, message):
message = "(Start of) title to " + message
while True:
matches =[]
start = Console.get_string(message, "title")
if not start:
return None
for title in db:
if title.lower().startswith(start.lower()):
matches.append(title)
if len(matches) == 0:
print("There are no dvds starting with", start)
continue
elif len(matches) == 1:
return matches[0]
elif len(matches) > DISPLAY_LIMIT:
print("Too many dvds start with {0}; try entering more of the title".format(start)
continue
else:
matches = sorted(matches, key=str.lower)
for i, match in enumerate(matches):
print("{0}: {1}".format(i+1, match))
which = Console.get_integer("Number (or 0 to cancel)",
"number", minimum=1, maximum=len(matches))
return matches[which - 1] if which != 0 else None
为尽可能快而容易地发现某个DVD,我们需要用户只输入其标题的一个或头几个字符。在具备了标题的起始字符后,我们在DBM中迭代并创建一个匹配列表。如果只有一个匹配项,就返回该项;如果有几个匹配项(但少于DISPLAY_LIMIT, 一个在程序中其他地方设置的整数),就以大小写不敏感的顺序展示所有这些匹配项,并为每一项设置一个编号,以便用户可以只输入编号就可以选择某个标题。(Console.get_integer()函数可以接受0,即便最小值大于0,以便0可以用作一个删除值。通过使用参数allow_zero=False, 可以禁止这种行为。我们不能使用Enter键,也就是说,没有什么意味着取消,因为什么也不输入意味着接受默认值。)
def list_dvds(db):
start =”"
if len(db)> DISPLAY.LIMIT:
start = Console.get_string(“List those starting with [Enter=all]”, "start”)
print()
for title in sorted(db, key=str.lower):
if not start or title.Iower().startswith(start.lower()):
director, year, ration = db[title]
print("{title} ({year}) {ration} minute{0}, by "
"{director}".format(Util.s(ration),**locals()))
列出所有DVD (或者那些标题以某个子字符串引导)就是对DBM的所有项进行迭代。
Util.s()函数就是简单的s = lambda x: "" if x == 1 else "s",因此,如果时间长度不是1分钟,就返回"s"。
def remove_dvd(db):
title = find_dvd(db, "remove")
if title is None:
return
ans = Console.get_bool("Remove {0}?".format(title), "no")
if ans:
del db[title]
db.sync()
要移除一个DVD,首先需要找到用户要移除的DVD,并请求确认,获取后从DBM中删除该项即可。
到这里,我们展示了如何使用shelve模块打开(或创建)一个DBM文件,以及如何向其中添加项、编辑项、对其项进行迭代以及移除某个项。
遗憾的是,在我们的数据设计中存在一个瑕疵。发行者名称是重复的,这很容易导致不一致性,比如,发行者Danny DeVito可能被输入为"Danny De Vito",用于 一个电影;也可以输入为“Danny deVito",用于另一个。为解决这一问题,可以使用两个DBM文件,主DVD文件使用标题键与(年份,时间长度,发行者ID)值; 发行者文件使用发行者ID (整数)键与发行者名称值。下一节展示的SQL数据库 版程序将避免这一瑕疵,这是通过使用两个表格实现的,一个用于DVD,另一个用于发行者。
12.2 SQL数据库
大多数流行的SQL数据库的接口在第三方模块中是可用的,Python带有sqlite3 模块(以及SQLite 3数据库),因此,在Python中,可以直接开始数据库程序设计。SQLite是一个轻量级的SQL数据库,缺少很多诸如PostgreSQL这种数据库的功能, 但非常便于构造原型系统,并且在很多情况下也是够用的。
为使后台数据库之间的切换尽可能容易,PEP 249 (Python Database API Specification v2.0)提供了称为DB-API 2.0的API规范。数据库接口应该遵循这一规范,比如sqlite3模块就遵循这一规范,但不是所有第三方模块都遵循。API规范中指定了两种主要的对象,即连接对象与游标对象。表12-1与表12-2中分别列出了这两种对象必须支持的API。在sqlite3模块中,除DB-API 2.0规范必需的之外,其连接对象与游标对象都提供了很多附加的属性与方法。
DVD程序的SQL版本为dvds.sql.py,该程序将发行者与DVD数据分开存储,以 避免重复,并提供一个新菜单,以供用户列出发行者。该程序使用的两个表格在图12-1
def connect(filename):
create= not os.path.exists(filename)
db = sqlite3.connect(filename)
if create:
cursor = db.cursor()
cursor.execute("CREATE TABLE directors ("
"id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, "
"name TEXT UNIQUE NOT NULL)")
cursor.execute("CREATE TABLE dvds ("
"id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, "
"title TEXT NOT NULL, "
"year INTEGER NOT NULL,"
"ration INTEGER NOT NULL, "
"director_id INTEGER NOT NULL, ”
"FOREIGN KEY (director_id) REFERENCES directors)")
db.commit()
return db
sqlite3.connect()函数会返回一个数据库对象,并打开其指定的数据库文件。如果该文件不存在,就创建一个空的数据库文件。鉴于此,在调用sqlite3.connect()之前,我们要注意数据库是否是准备从头开始创建,如果是,就必须创建该程序要使用的表格。所有査询都是通过一个数据库游标完成的,可以从数据库对象的cursor()方法获取。
注意,两个表格都是使用一个ID字段创建的,ID字段有一个AUTOINCREMENT 约束——这意味着SQLite会自动为ID字段赋予唯一性的数值,因此,在插入新记录时,我们可以将这些字段留给SQLite处理。
SQLite支持有限的数据类型——实际上就是布尔型、数值型与字符串——但使用数据'‘适配器”可以对其进行扩展,或者是扩展到预定义的数据类型(比如那些用于日期与datetimes的类型),或者是用于表示任意数据类型的自定义类型。DVD程序并不需要这一功能,如果需要,sqlite3模块的文档提供了很多详细解释。我们使用的外部键语法可能与用于其他数据库的语法不同,并且在任何情况下,只是记录我们的意图,因为SQLite不像很多其他数据库那样需要强制关系完整性,sqlite3另一点与众不同的地方在于其默认行为是支持隐式的事务处理,因此,没有提供显式的“开始事务” 方法。
def add_dvd(db):
title = Console.get_string("Title", "title")
if not title:
return
director = Console.get_string("Director", "director")
if not director:
return
year = Console.get_integer("Year", "year”, minimum=1896,
maximum=datetime.date.today().year)
ration = Console.get_integer("Duration (minutes)", "minutes",
minimum=0,maximum=60*48)
director_id = get_and_set_director(db, director)
cursor = db.cursor()
cursor.execute("INSERT INTO dvds ”
"(title, year, ration, director_id)"
"VALUES (?, ?, ?, ?)",
(title, year, ration, director_id))
db.commit()
这一函数的开始代码与dvds-dbm.py程序中的对应函数一样,但在完成数据的收集后,与原来的函数有很大的差别。用户输入的发行者可能在也可能不在directors表格中,因此,我们有一个get_and_set_director()函数,在数据库中尚无某个发行者时, 该函数就将其插入到其中,无论哪种情况都返回就绪的发行者ID,以便在需要的时候插入到dvds表。在所有数据都可用后,我们执行一条SQL INSERT语句。我们不需要指定记录ID,因为SQLite会自动为我们提供。
在査询中,我们使用问号(?)作为占位符,每个?都由包含SQL语句的字符串后面的序列中的值替代。命名的占位符也可以使用,后面在编辑记录时我们将看到。尽管避免使用占位符(而只是简单地使用嵌入到其中的数据来格式化SQL字符串)也是可能的,我们建议总是使用占位符,并将数据项正确编码与转义的工作留给数据库模块来完成。使用占位符的另一个好处是可以提高安全性,因为这可以防止任意的SQL 被恶意地插入到一个査询中。
def get_and_set_director(db, director):
director_id = get_director_id(db, director)
if directorjd is not None:
return director_id
cursor = db.cursor()
cursor.execute("lNSERT INTO directors (name) VALUES (?)”,(director,))
db.commit()
return get_director_id(db, director)
这一函数返回给定发行者的ID,并在必要的时候插入新的发行者记录。如果某个记录被插入,我们首先尝试使用get_director_id()函数取回其ID。
def get_director_id(db, director):
cursor = db.cursor()
cursor.execute("SELECT id FROM directors WHERE name=?",(director,))
fields = cursor.fetchone()
return fields[0] if fields is not None else None
get_director_id()函数返回给定发行者的ID,如果数据库中没有指定的发行者,就返回None。我们使用fetchone()方法,因为或者有一个匹配的记录,或者没有。(我们知道,不会有重复的发行者,因为directors表格的名称字段有一个UNIQUE约束,在任何情况下,在添加一个新的发行者之前,我们总是先检査其是否存在。)这种取回方法总是返回一个字段序列(如果没有更多的记录,就返回None)。即便如此,这里我们只是请求返回一个单独的字段。
def edit_dvd(db):
title, identity = find_dvd(db, "edit")
if title is None:
return
title = Console.get_string("Title","title", title)
if not title:
return
cursor = db.cursor()
cursor.execute("SELECT dvds.year, dvds.ration, directors.name"
“FROM dvds, directors "
"WHERE dvds.director_id = directors.id AND "
"dvds.id=:id", dict(id=identity))
year, ration, director = cursor.fetchone()
director = Console.get_string("Director", "director", director)
if not director:
return
year = Console,get_integer("Year","year", year, 1896,datetime.date.today().year)
ration = Console.get_integer("Duration (minutes)", "minutes",
ration, minimum=0, maximum=60*48)
director_id = get_and_set_director(db, director)
cursor.execute("UPDATE dvds SET title=:title, year=:year,"
"ration=:ration, director_id=:directorjd "
"WHERE id=:identity", locals())
db.commit()
要编辑DVD记录,我们必须首先找到用户需要操纵的记录。如果找到了某个记录,我们就给用户修改其标题的机会,之后取回该记录的其他字段,以便将现有值作为默认值,将用户的输入工作最小化,用户只需要按Enter键就可以接受默认值。这里,我们使用了命名的占位符(形式为:name),并且必须使用映射来提供相应的值。对SELECT语句,我们使用一个新创建的字典;对UPDATE语句,我们使用的是由 locals()返回的字典。
我们可以同时为这两个语句都使用新字典,这种情况下,对UPDATE语句,我们可以传递 dict(title=title, year=year, ration=ration, director_id=director_id, id=identity)),而非 locals()。
在具备所有字段并且用户已经输入了需要做的改变之后,我们取回相应的发行者ID (如果必要就插入新的发行者记录),之后使用新数据对数据库进行更新。我们采用了一种简化的方法,对记录的所有字段进行更新,而不仅仅是那些做了修改的字段。
在使用DBM文件时,DVD标题被用作键,因此,如果标题进行了修改,我们就需要创建一个新的键-值项,并删除原始项。不过,这里每个DVD记录都有一个唯一性的ID,该ID是记录初次插入时创建的,因此,我们只需要改变任何其他字段的值, 而不需要其他操作。
def find_dvd(db, message):
message = "(Start of) title to " + message
cursor = db.cursor()
while True: .
start = Console.get_stnng(message, "title")
if not start:
return (None, None)
cursor.execute("SELECT title, id FROM dvds "
"WHERE title LIKE ? ORDER BY title”,
(start +"%",))
records = cursor.fetchall()
if len(records) == 0:
print("There are no dvds starting with", start)
continue
elif len(records) == 1:
return records[0]
elif len(records) > DISPLAY_LIMIT:
print("Too many dvds ({0}) start with {1}; try entering "
"more of the title".format(len(records),start))
continue
else:
for i, record in enumerate(records):
print("{0}:{1}".format(i + 1, record[0]))
which = Console.get_integer("Number (or 0 to cancel)",
"number", minimum=1, maximum=len(records))
return records[which -1] if which != 0 else (None, None)
这一函数的功能与dvdsdbm.py程序中的find_dvd()函数相同,并返回一个二元组 (DVD标题,DVD ID)或(None, None),具体依赖于是否找到了某个记录。这里并不需要在所有数据上进行迭代,而是使用SQL通配符(%),因此只取回相关的记录。
由于我们希望匹配的记录数较小,因此我们一次性将其都取回到序列的序列中。如果有不止一个匹配的记录,但数量上又少到可以显示,我们就打印记录,并将每条记录附带一个数字编号,以便用户可以选择需要的记录,其方式与在dvds-dbm.py程序中所做的类似:
def list_dvds(db):
cursor = db.cursor()
sql = ("SELECT dvds.title, dvds.year, dvds.ration, "
"directors.name FROM dvds, directors "
"WHERE dvds.director_id = directors.id")
start = None
if dvd_count(db) > DISPLAY_LIMIT:
start = Console.get_string("List those starting with [Enter=all]", "start")
sql += " AND dvds.title LIKE ?"
sql += ” ORDER BY dvds.title"
print()
if start is None:
cursor.execute(sql)
else:
cursor.execute(sql, (start +"%",))
for record in cursor:
print("{0[0]} ({0[1]}) {0[2]} minutes, by {0[3]}".format(record))
要列出每个DVD的详细资料,我们执行一个SELECT査询。该査询连接两个表,如果记录(由dvd_count()函数返回)数量超过了显示限制值,就将第2个元素添加到WHERE 分支,之后执行该査询,并在结果上进行迭代。每个记录都是一个序列,其字段是与 SELECT査询相匹配的。
def dvd_count(db):
cursor = db.cursor()
cursor.execute("SELECT COUNT(*) FROM dvds")
return cursor.fetchone()[0]
我们将这几行代码放置在一个单独的函数中,因为我们在几个不同的函数中都需要使用这几行代码。
我们忽略了 list_directors()函数的代码,因为该函数在结构上与list_dvds()函数非常类似,只不过更简单一些,因为本函数只列出一个字段(name)。
def remove_dvd(db):
title, identity = find_dvd(db, "remove")
if title is None:
return
ans = Console.get_bool("Remove {0}?".format(title), "no")
if ans:
cursor = db.cursor()
cursor.execute("DELETE FROM dvds WHERE id=?", (identity,))
db.commit()
在用户需要删除一个记录时,将调用本函数,并且本函数与dvds-dbm.py程序中 相应的函数是非常类似的。
到此,我们完全查阅了 dvds-sql.py程序,并且了解了如何创建数据库表格、选取 记录、在选定的记录上进行迭代以及插入、更新与删除记录。使用execute()方法,我们可以执行底层数据库所支持的任意SQL语句。
SQLite提供了比我们这里使用的多得多的功能,包括自动提交模式(以及任意其他类型的事务控制),以及创建可以在SQL查询内执行的函数的能力。提供一个工厂函数并用于控制对每个取回的记录返回什么(比如,一个字典或自定义类型,而不是字段序列)也是可能的。此外,通过传递“:memory:”作为文件名,创建内存中的SQLite 数据库也是可能的。
以上内容部分摘自视频课程05后端编程Python22 数据库编程,更多实操示例请参照视频讲解。跟着张员外讲编程,学习更轻松,不花钱还能学习真本领。
Ⅲ python镐庝箞杩涘叆缂栫▼鐣岄溃
1棣栧厛锛岀偣鍑诲紑濮嬫寜阍 2鍦ㄦ悳绱㈡爮杈揿叆IDLE锛屽ぇ灏忓啓閮藉彲浠ワ纴镞犺烘槸Python2杩樻槸Python3閮芥槸涓镙风殑 3鐢ㄩ紶镙囧乏阌鍗曞嚮镓揿紑鎼灭储缁撴灉 4杩欐槸Python镓揿紑钖庣殑鐣岄溃锛屽氨濡傚悓浠栫殑钖嶅瓧涓镙风亩娲侊纴涓鐩浜嗙劧銆
镓揿紑powershell鎴朿md绛塻hell绋嫔簭 阌鍏python xxxpy杩愯宲ython绋嫔簭锛 xxx浠h〃鍒氭墠淇濆瓨镄勬枃浠跺悕銆
涓浣跨敤Python镄勮В閲婂櫒1瀹夎卲ython涓鑸閮戒细链変竴涓浜や簰寮忚В閲婂櫒锛屾垜浠鍙浠ュ湪杩欓噷鐩存帴鍐椤叆杩愯 2浣嗗傛灉鎴戜滑灏嗗叾鍏抽棴锛屽垰镓嶅啓镄勪唬镰佸氨浼氢涪澶辨ゆ椂锛屾垜浠鏂板缓涓涓鏂囨湰鏂囨。锛屽啓鍏print #39hello world#39锛岀劧钖庡皢鏂囦欢钖嶆敼鍐欎负銆
鐣岄溃濡备笅锛屽彲浠ヤ娇鐢╬kg install𨱒ュ畨瑁呭寘锛屽畨瑁卲ython镄勮瘽锛屽懡浠ゆ槸钬减kg install python钬濓纴濡备笅璇风偣鍑昏緭鍏ュ浘鐗囨弿杩 鎴愬姛瀹夎卲ython钖庯纴灏卞彲浠ヨ繍琛宲ython浜嗭纴杈揿叆python锻戒护锛屽氨浼氲繘鍏python浜や簰寮忕幆澧冨备笅璇风偣鍑昏緭鍏ュ浘鐗囨弿杩般
1 鍒癙ythonx锛寉镄勭绣鍧涓嬭浇Pythonx锛寉2750exe绾500M 2 瀹夎呯殑镞跺欙纴阃夋嫨Full瀹屽叏瀹夎咃纴杩欐牱姣旇缉鐪佹椂涓庢柟渚垮畨瑁呭畬鎴愬氨鍙浠ヨ颁簨链绫讳技锛屽彧闇瑕佹柊寤轰竴涓銆
涓嬭浇鏂瑰纺鐩存帴鎼灭储Termux鍗冲彲锛岀亩鍗曟柟渚夸簩姝ワ纴鎴愬姛瀹夎呭悗锛岀偣鍑籘ermux杩愯岋纴骞跺紑濮嬬紪绋嫔畨瑁匮ermux涔嫔悗锛屽彲浠ュ湪镓嬫満妗岄溃鐪嫔埌璇ヨ蒋浠讹纴濡傚浘镓绀虹劧钖庣偣鍑昏繍琛孴ermux锛屾ゆ椂杩涘叆鍒瘪ermux缂栫▼鐣岄溃绗涓夋ワ纴瀹夎匬ython鍦═ermux杩愯岀晫闱銆
鍙浠ュ埌360杞浠剁″舵垨钥呰吘璁瀹夊叏绠″瓧锛 鐩存帴鎼灭储python灏卞彲浠ュ畨瑁呭彲浠ュ幓python瀹樼绣涓嬭浇 铹跺悗瀹夎呭傛灉浣犳湁python绋嫔簭锛 浣犳妸绋嫔簭𨰾栧埌璁颁簨链灏卞彲浠ユ煡鐪嬩唬镰 濡傛灉浣犳槸浣犲箆b镡熺殑璇濈数鑴戣嚜甯︾殑vbs涔熸槸鎸轰笉阌欑殑銆
濡俻yuic5 o testpy testui锛屽备笅锛屽氨鏄鍒氭墠璁捐$殑UI鐣岄溃镄凯ython浠g爜杩欓噷鎴戜滑鍐嶆坊锷犱竴涓媘ain鍑芥暟锛岀洿鎺ュ垱寤轰笂闱㈢被镄勫硅薄锛屾樉绀哄硅瘽妗嗗氨琛岋纴濡备笅镣瑰嚮杩愯岃繖涓绋嫔簭锛屾晥鏋滃备笅锛屽拰涓婇溃璁捐$殑涓镙凤纴闱炲父鏂逛究銆
鍙浠ヤ笅杞藉幓python瀹樼绣涓嬭浇涓涓瀹夎呭寘锛屼篃鍙浠ヤ笅杞界被浼紁ycharm镄勭紪杈戝櫒杩涜岀紪绋嬨
杩欐槸缂栬緫鍣ㄧ殑shell 鐣岄溃 灏辫窡 鑺+r 铹跺悗cmd锛屽嚭𨱒ョ殑鐣岄溃浣犺緭鍏python 鏄涓镙风殑鏁堟灉銆
涓鐪嬩綘灏辨槸鏂版坠锛屾垜浠ュ墠涔熷湪𨱍虫庝箞榛戠槠妗嗗彉鎴愮獥鍙f嗭纴寰堢亩鍗旷殑锛岀洿鎺ョ敤python瀵瑰簲镄勬柟娉曞氨鍙浠ヤ简锛屾湁PyQt锛孭ython浠涔堢殑锛岀洿鎺pip灏卞彲浠ヤ简锛屾哕铹跺悗瀵煎寘锛岃︾粏镄勬柟娉曞弬钥冩枃妗e嵆鍙銆
1棣栧厛鍦ㄨ祫婧愮$悊鍣ㄩ噷澶嶅埗涓涓媝y鏂囦欢瀛樻斁镄勮矾寰勶纴鎸変笅windows阌锛媟锛屽湪杩愯岄噷杈揿叆cmd锛屽洖杞︽墦寮锻戒护琛2鍦ㄥ懡浠よ岄噷锛屽厛鍒囨崲鍒皃y鏂囦欢镄勮矾寰勪笅闱锛屾帴镌杈揿叆钬减ython 鏂囦欢钖峱y 钬濊繍琛宲ython鏂囦欢3鎸変笅锲炶溅阌锛屽彲浠ャ
镊瀛python镄勫墠鎻愭槸锛屼綘鐭ラ亾瀛︿粈涔坧ython寮鍙戞柟钖戜䌷澶氾纴鎴戞兂宸ヤ綔镄勯嗗烟鏄浠涔堣揪鍒板伐浣沧爣鍑呜佹帉鎻″摢浜涚煡璇呜繖浜涚煡璇嗕粠鍝閲岃幏寰楀﹀埌浠涔堢▼搴︾畻钖堟牸璐哥劧铡昏嚜瀛﹀彧鑳借秺瀛﹁秺锅2闇瑕佸緢寮虹殑镊鍒惰兘锷 java缂栫▼涓嶆瘆鍏朵粬鎶鑳姐
瀹屽叏鍙浠ヨ屼笖杩桦彲浠ヨ法骞冲彴 鍙戣岀増镊甯︾殑搴撴湁Tkinter锛岃宪钖岖殑绗涓夋柟搴撴湁PythonPyGTKPyQT绛夊叾涓璔T鏄涓涓璺ㄥ钩鍙扮殑寮哄ぇ镄刄I锲惧舰搴掳纴镢楀悕镄刧oogle earth妗岄溃鐗圤pear灏辨槸鐢≦T鍐欑殑鐣岄溃QT镄凯ython瀹炵幇鍙锅歅yQT锛岀敤Pytho銆
涓閮ㄧ讲Python缂栫▼鐜澧 鎴戠殑鏄痺indowsx86锛64浣岖郴缁燂纴镓浠ユ垜阃夋嫨浜哖ython360锛64浣岖殑缃戠粶瀹夎呯増鎴戞病鏁㈤夋渶鏂扮殑锛屾曞叾浠栧寘娌℃湁鐩稿簲镟存柊锛屾墍浠ラ変简涓涓绗浜屾柊镄勪簩璁剧疆鐜澧冨彉閲 绠鍗曡达纴璁剧疆鐩稿簲镓ц岀▼搴忕殑鐜澧冨彉閲忋
Ⅳ 锅囨湡蹇呴’鎺屾彙镄勭紪绋嫔姙鍏搴
娌℃湁杩欎簺Python缂栫▼锷炲叕搴撴嬁浠涔埚﹀ソ镊锷ㄥ寲!
Python Excel镊锷ㄥ寲搴
1.xl wings搴
鐗圭偣锛歺l wings鏄寮婧愪笖鍏嶈垂镄勶纴 棰勮呬简Anaconda鍜
Win Python锛 鍙鍦╓indows鍜宫acos涓婅繍琛屻
2.open pyx l搴
鐗圭偣锛歰pen pyx l鏄涓涓鐢ㄤ簬璇诲彇/缂栧啓Excel 2010
xls x/xls m/xl tx/xl tm鏂囦欢镄凯ython搴撱
3.xl rd搴
鐗圭偣锛氩湪python涓锛 xi rd搴撴槸涓涓寰埚父鐢ㄧ殑璇诲彇excel鏂囦欢镄
搴掳纴 鍏跺筫xcel鏂囦欢镄勮诲彇鍙浠ュ疄鐜版瘆杈幂簿缁嗙殑鎺у埗銆
4.xl wt搴
鐗圭偣锛氱被姣斾簬xi rd镄剅eader锛 闾d箞xl wt灏辩浉瀵箇riter锛 钥屼笖寰
绾姝g殑涓镣瑰氨鏄瀹冨彧鑳藉笶xcel杩涜屽啓镎崭綔銆
5.xl utils搴
鐗圭偣锛歺l utils(excel utilities) 鏄涓涓鎻愪緵浜呜稿氭搷浣滀慨鏀筫xcel
鏂囦欢鏂规硶镄勫簱銆倄l utils搴扑篃浠呬粎鏄阃氲繃澶嶅埗涓涓鍓链杩涜
镎崭綔钖庝缭瀛树竴涓鏂版枃浠讹纴 xl utils搴揿氨镀忔槸xi rd搴揿拰xl wt搴扑箣
闂寸殑涓搴фˉ姊侊纴 锲犳わ纴 xl utils搴撴槸渚濊禆浜巟i rd鍜寈l wt涓や釜搴撶殑銆
6.xls x writer搴
鐗圭偣锛歺ls x writer鏄鐢ㄤ簬鍒涘缓Excel XLS X鏂囦欢镄凯ython妯″潡锛 鍙鐢
浜庡皢鏂囨湰銆佹暟瀛椼佸叕寮忓拰瓒呴摼鎺ュ啓鍏Excel 2007+XLS X鏂囦欢涓镄
澶氢釜宸ヤ綔琛ㄣ
7.pandas搴
鐗圭偣锛歱andas鏄锘轰簬NumPy镄勪竴绉嶅伐鍏凤纴 璇ュ伐鍏锋槸涓轰简瑙e喅鏁
鎹鍒嗘瀽浠诲姟钥屽垱寤虹殑銆
8.Mar mir搴
鐗圭偣锛歁ar mir閲囩敤Python鏁版嵁缁撴瀯骞跺皢鍏惰浆鎹涓虹数瀛愯〃镙笺傚畠鏄
绫诲浐阅囦笂镄刹l wt鍜宷 oogle鐢靛瓙琛ㄦ牸銆傜洰镙囨槸浣跨敤链灏戠殑閰岖疆杞
𨱒剧敓鎴愬氱岖被鍨嬬殑链夌敤琛ㄦ枃浠躲
Python Word镊锷ㄥ寲搴
1.python-doc x搴
鐗圭偣锛歱ython-doc x鏄涓涓鐢ㄤ簬鍒涘缓鍜屾洿鏂癕icrosoft
Word(doc x) 鏂囦欢镄凯ython搴揿揩阃熷紑濮嬨佸勭悊鏂囨。銆傚勭悊鏂囨湰銆
浣跨敤鎴闱銆佷娇鐢ㄩ〉鐪夊拰椤佃剼銆丄PI锘虹鐞嗐佽В镙峰纺銆佷娇鐢ㄦ牱寮忕悊
瑙e浘鐗囧拰鍏朵粬褰㈢姸
2.t extract搴
鐗圭偣锛氩畠钖屾椂鍏奸【"doc"鍜"doc x"锛 浣嗗畨瑁呰繃绋嬮渶瑕佷竴浜涗緷璧栥
浣犲彲浠ユ壒閲忕殑鐢╬ython鐢熸垚word鏂囦欢锛 鎺ㄨ崘浣跨敤doc x锛 涓嶉渶瑕侊骏
浼氩お澶氥
Python PPT镊锷ㄥ寲搴
1.python-pp tx搴
鐗圭偣锛歱ython-pp tx鏄涓涓鐢ㄤ簬鍒涘缓鍜屾洿鏂癙owerPoint
(pp tx) 鏂囦欢镄凯ython搴撱傚吀鍨嬬敤阃旀槸浠庢暟鎹搴揿唴瀹圭敓鎴愯嚜瀹氢箟
PowerPoint婕旂ず鏂囩匡纴 鍙阃氲繃鍗曞嚮Web搴旂敤绋嫔簭涓镄勯摼鎺ヤ笅杞
Python闾浠惰嚜锷ㄥ寲搴
1.Dian go Celery SES搴
鐗圭偣锛氲繖涓鍖呮彁渚涗简涓涓狤mail Backend𨱒ュ埄鐢╠jango-
celery鍙戦佺数瀛愰偖浠躲傛偍鍙浠ュ皢Email Backend鎻掑叆鎭ㄧ殑椤圭洰涓
锛岃屾棤闇瀵逛唬镰佽繘琛屼换浣曚慨鏀广
2.Envelopes搴
鐗圭偣锛欵nvelopes鏄疨ython镄勭数瀛愰偖浠跺拰smtp lib妯″潡镄勫寘瑁呭櫒銆
瀹冩棬鍦ㄤ娇鍦≒ython涓澶勭悊澶栧彂鐢靛瓙闾浠跺彉寰楃亩鍗曡屾湁瓒c
3.Flanker搴
鐗圭偣锛氱敱mail qun寮婧愮殑Flanker-emailaddress and
MIME parsing for Python鏄涓涓瑙f瀽楂樻晥銆佸归敊鐜囦笉阌欑殑
python绗涓夋柟镓╁𪾢搴撱
4.im box搴
鐗圭偣锛氱敤浜庤诲彇IMAP闾绠卞苟灏嗙数瀛愰偖浠跺唴瀹硅浆鎹涓烘満鍣ㄥ彲璇
鏁版嵁镄凯ython搴
5.inbox.py搴
鐗圭偣锛氲繖鏄鎭ㄨ佽繃镄勬渶绠鍗旷殑SMTP链嶅姟鍣ㄣ傚畠鏄寮傛ョ殑銆备竴涓瀹
渚嬫疮绉掑簲璇ュ勭悊涓鍗冨氩皝鐢靛瓙闾浠
Python ODF镊锷ㄥ寲搴
1.Relato rio搴
鐗圭偣锛歊elato rio鏄涓涓妯℃澘搴掳纴 瀹冩彁渚涗简涓绉嶈交𨱒捐緭鍑哄氱嶆枃浠
(odt銆乷ds銆乸ng銆乻vg绛) 镄勬柟娉曘傞氲繃涓哄畠浠鍒涘缓鎻掍欢鍙浠ヨ交
𨱒炬坊锷犲规洿澶氭枃浠剁被鍨嬬殑鏀鎸併
Python PDF镊锷ㄥ寲搴
1.Py PDF 2搴
鐗圭偣锛歅y PDF 2鏄涓涓绾疨ython PDF搴掳纴 鑳藉熸媶鍒嗐佸悎骞躲佽佸壀
鍜岃浆鎹PDF鏂囦欢镄勯〉闱銆傚畠杩桦彲浠ュ悜PDF鏂囦欢娣诲姞镊瀹氢箟鏁版嵁銆
镆ョ湅阃夐”鍜屽瘑镰併
2.ReportLab搴
鐗圭偣锛歊eportLab鏄涔呯粡钥冮獙銆佽秴寮哄ぇ镄勫紑婧愬紩镎庯纴 鐢ㄤ簬鍒涘缓澶
𨱒傜殑銆佹暟鎹椹卞姩镄凯DF鏂囨。鍜岃嚜瀹氢箟鐭㈤噺锲惧舰銆傚畠鏄鍏嶈垂镄勚佸紑
婧愮殑锛 骞朵笖鏄鐢≒ython缂栧啓镄勚
3.PDF miner搴
鐗圭偣锛歅DF Miner鏄涓娆剧敤浜嶱DF鏂囨。镄勬枃链鎻愬彇宸ュ叿銆
Python寰淇¤嚜锷ㄥ寲搴
1.Python wxp y搴
鐗圭偣锛氩井淇℃満鍣ㄤ汉/鍙鑳芥槸链浼橀泤镄勫井淇′釜浜哄彿API锛 wxp y鍦╥t chat
镄勫熀纭涓婏纴阃氲繃澶ч噺鎺ュ彛浼桦寲鎻愬崌浜嗘ā鍧楃殑鏄撶敤镐э纴骞惰繘琛屼赴瀵
镄勫姛鑳芥墿灞曘
Python鏂囦欢澶勭悊镊锷ㄥ寲搴
1.os搴
鐗圭偣锛氭湰妯″潡鎻愪緵浜嗕竴绉崭娇鐢ㄤ笌镎崭綔绯荤粺鐩稿叧镄勫姛鑳戒究鎹峰纺阃斿缎
Python缁煎悎锷熻兘镊锷ㄥ寲搴
1.win32com搴
鐗圭偣锛归in32com妯″潡涓昏佷负Python鎻愪緵璋幂敤windows搴曞眰缁勪欢
瀵箇ord銆丒xcel銆丳PT绛夎繘琛屾搷浣灭殑锷熻兘锛 鍙鑳藉湪Windows鐜澧
涓嬩娇鐢锛 骞朵笖闇瑕佸畨瑁卭ffice鐩稿叧杞浠舵墠琛(WPS涔熻) 銆
2.u noconv搴
鐗圭偣锛氭槸涓涓锻戒护琛屽伐鍏凤纴 鍙浠ュ皢Libre Office鍙浠ュ煎叆镄勪换浣曟枃
妗f牸寮忚浆鎹涓篖ibre Office鍙浠ュ煎嚭镄勪换浣曟枃妗f牸寮忋傚畠鍒╃敤
Libre Office镄刄NO缁戝畾杩涜屾枃妗g殑闱炰氦浜掑纺杞鎹锛 涔熸敮鎸
OpenOffice.
Ⅳ python/java/web前端需要哪个编程资料
Python、Java和Web前端都需要相应的编程资料来学习和提高编程能耐余乱力,以下是一些常用的编程资料:
Python编程资料:
《Python编毁运程从入门到实践》
《Python核心编程》
《Python Cookbook》
Python官方文档
Python编程网站(如Python官网、Python教程网等)
Java编程资料:
《Java编程思想》
《Effective Java》
《Head First Java》
Java官方文档
Java编程网站(如Java官网、Java教程网等)
Web前端编程资料:
《JavaScript高级程序设计》
《CSS权威指南》
《HTML5权威指南》
MDN Web文档
Web前端编程网站(昌档如W3School、Bootstrap中文网等)
以上是一些常用的编程资料,但不限于此,还有很多其他的资料可以供大家学习和参考。
Ⅵ python 帮助文档 怎么使用