Python打包exe文件方法汇总【4种】

Python打包exe文件方法汇总【4种】
Python打包exe文件方法汇总【4种】

Python打包exe文件方法汇总Python作为解释型语言,发布即公开源码,虽然是提倡开源但是有些时候就是忍不住想打包成exe,不仅仅是为了对代码进行加密,而是为了跨平台。防止有些没有安装py环境的电脑无法运行软件。

目录对python代码打包成exe的方式有4种,py2exe,pyinstaller,cx_Freeze,nuitka,分别对以上4种方法介绍,欢迎纠错和提供新的办法。

py2exe

介绍

py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序。

优点:

可以把python打包成exe

缺点:

打包好的exe只能在相同的系统下运行,比如你在XP系统用py2exe打包好的exe只能在XP上运行,在win7上肯定有问题,而且也是存在在别的XP 机子上也可能不能运行,因为一些别的机子可能会缺少dll文件什么的,作者我当时之所以抛弃py2exe 也是因为这个原因;

打包的文件也需要打包同exe下的dll,和一些库的压缩包,不然exe根本跑不起来

打包时候报始终报RuntimeError: BeginUpdateResource错误,就需要拷贝dll文件。C:\WINDOWS\system32\python27.dll复制到dist目录

总之毛病一大堆,基本上已经舍弃了

使用

下载地址

安装好后,准备进行打包

准备一个文件x.py,这个x.py就是想要打包成exe。

然后这x.py同目录下新建一个setup.py,内容如下:

#coding=utf-8

from distutils.core import setup

import py2exe

includes = ["encodings", "encodings.*"]

#要包含的其它库文件

options = {"py2exe":

{

"compressed": 1, #压缩

"optimize": 2,

"ascii": 1,

"includes": includes,

"bundle_files": 1 #所有文件打包成一个exe文件

}

}

setup (

options = options,

zipfile=None, #不生成library.zip文件

console=[{"script": "x.py", "icon_resources": [(1, "Q.ico")] }]#源文件,程序图标)

然后这cmd窗口下运行:

python setup.py py2exe

py2exe使用方法(含一些调试技巧,如压缩email 类)

pyinstaller

PyInstaller除了win32平台外还支持Linux,Unix平台.py2exe的用法在前面的博文里已经有了,现在看看PyInstaller,pyinstaller是目前应用最多的

python打包工具,也是我最常用的。

PyInstaller本身并不是Python模块,所以安装时随便放在哪儿都行。

优点:

可将python文件转成可执行文件

跨平台

输出的可以是单一目录,也可以是一个单独的打好包的可执行文件。py2exe 貌似输出目录。

智能支持python的第三方模块如PyQt,外部数据文件等

支持EGG格式文件

可执行文件可以用UPX压缩,二进制压缩方式

支持控制台和视窗两种方式。

可以选择exe文件的图标(Windows only)

支持COM server (Windows only)

缺点:

import导入的问题

pyinstaller是很智能的,只要指定了入口py文件,那么它就会根据代码自动查找需要导入的包。但是隐式导入的话,平常运行是没有问题的,举例:# test1.py

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

DB_CONNECT_STRING = 'mysql+pymysql://root:123456@localhost/study'

engine = create_engine(DB_CONNECT_STRING, echo = False)

DB_Session = sessionmaker(bind = engine)

session = DB_Session()

print('this is my test')

运行这个ORM库的初始化引擎,是没有问题的,在console得到结果:this is my test

那么我们开始打包,使用最简单的pyinstaller test1.py。打包完成后,在当前目录下有个dist文件夹,进入dist下的test1文件夹,然后打开cmd,运行这个exe,我们就会发现:

提示:no model named ‘pymysql’

这是怎么回事呢?那么问题来了,sqlalchemy这个库在初始化的时候是不需要显示导入引擎库的,它自己有一个create_engine()的函数来初始化,这个字符串是使用者根据规则来自己填写的。其实解决的方法很简单,我们只要在显式导入pymysql这个库即可。现在我们导入这个库:

import pymysql

1

重新打包一遍(重新打包的时候记得删除掉spec文件,否则会有缓存,或者是加上–clean选项清除掉),再次运行,现在就没有这个问题了。

多进程打包的问题

官方的CPython存在一个GIL锁,这个锁的存在有很多优点,很多库都是线程安全的,单线程执行的效率也高。在python早期的一个版本中取消掉了GIL,代之以高粒度的锁来实现多线程,但是实际应用中单个线程的效率大大降低。故后来又将GIL这个锁还原回去,所以至今的python2也好还是python3中都会有这个锁。但是这个锁有很大一个问题,那就是效率问题,它导致了python仅仅只能利用一个core来进行数据的计算。所以后面为了弥补这个GIL带来的问题,专家们设计了multiprocessing库,gevent库等。前一个是多进程库,为了解决python用于数据密集型处理的情况;后一个用于异步IO处理的情况,基本原理就是在CPU时钟之间来回切换,简单的例子就是爬虫程序爬取网页的时候。假如有10个url,我们都要去GET它,实际上网络之间的延迟是大大高于计算机内部的,那么这个时间内计算机就切换到下一个。

有时候运用多进程是必须的,这个替代不了,哪怕它占用资源很多。

使用

安装:

pip install pyinstaller

1

使用方法(例子):

pyinstaller -D -p F:\Python27\Lib -i logo.ico mian.py

1

-D:打包成多个文件

-p:指定python安装包路径

-i:指定图标,我的图标放在同目录下

mian.py:要打包的文件,和图标放在同目录下了

-D与-F一一对应,-F是打包成一个单独的文件。最后一排加上–noconsole,就是无窗口运行。

如果py程序是多进程的话,使用pyinstaller打包会出现错误,这个时候只要加上一行代码

在:

if name==‘mian’:

#新增

multiprocessing.freeze_support()

即可

有的时候你加上图片后打包会出错,这是因为图标里面的格式出错了,需要用图片编辑软件重新对图片内部大小进行设置,这个百度一下吧~

如果要加密混淆代码(其实没有用,一样可以反编译出你的源代码,但是聊胜于无吧)

加上一行--key=asfweakjhfksafkasdkdbas随便几个字符串

好像要安装依赖包,根据提示安装即可

cx_Freeze

python中比较常用的python转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller。py2exe恐怕是三者里面知名度最高的一个,但是同时相对来说它的打包质量恐怕也是最差的一个。pyinstaller打包很好,但是操作工序较为复杂,推荐cx_freeze,可以通过pip install cx-freeze 安装。–这是别人的描述,其实我觉得pyinstaller其实挺简单的

使用

安装方法:

打开cmd,输入pip install cx-freeze 后,会发现在python的Scripts文件夹下生成了三个文件

然后在cmd中,切换到Scripts路径下,输入python cxfreeze-postinstall,会发现Scripts文件夹下又多了.bat文件,此时已经安装成功

继续在cmd下尝试输入cxfeeeze -h 验证下,显示成功。

提示:直接通过pip install cx-freeze 安装,仍然出现错误时(找不到文件),最好去官网:网址手动下载相应版本的cx-freeze文件,放在Scripts文件夹下,手动双击安装,然后再运行cxfreeze-postinstall。(例如:我的python版本是3.4.3,下载cx_Freeze-4.3.3.win-amd64-py3.4的文件。注意,版本不对无法安装!)

在cxfreeze的安装目录下即\Python34\Scripts,添加一个文件cxfreeze.bat(可用记事本)cxfreeze.bat内容如下:

@ echo off

C:\Python34\python.exe C:\Python34\Scripts\cxfreeze %*

1

2

在该目录下输入czfreeze -h也可以查看安装情况(用pip install cxfreeze 就可直接安装改第三方库)

打包方法

打包文件时要在Scripts文件夹路径下操作,文件的路径最好是绝对路径。例如:将G 盘的hello.py 打包到G 盘的123文件夹下:cxfreeze g:\hello.py --taget-dir g:\123 或者cxfreeze g:\hello.py --taget-dir g:\123 --base-name=Win32GUI。加上–base-name=Win32GUI可以在运行exe时去掉cmd黑框。

具体操作:

首先在命令提示符中使用cd命令转换到所需要转换的python文件的目录中,因为转换后的dist文件夹会出现在命令提示符的当前目录中

然后输入:

cxfreeze

--init-script=C:\Users\tangc\Desktop\alien_invasion\alien_invasion.py alien_invasion.py

--init-script=后接绝对路径

如果你的程序中有图片等资源,是需要根据程序中的相对路径加入到dist文件中,也要在.exe同目录中加入images的文件夹(图片资源)

如果原.py程序使用了图片等素材,并且添加图片是相对路径(同一个文件夹下可以不使用绝对路径),打包文件后,需要将图片等素材拷贝一份放在打包后的文件夹下,否则运行.exe程序会找不到图片素材。

如果原.py程序使用图片添加的是绝对路径,在本地电脑上运行时可能不会发现错误。但是你将打包后的文件发给另一台机器,运行.exe程序会报错,大概意思是“根据你写的绝对路径找不到图片等素材”,即使你在文件夹下拷贝了素材,但是绝对路径也是错误的,所以,最好使用上一种方法。

注意:

只能指定一个要打包的模块,也就是启动模块

发布后,可执行文件执行路径不能有中文(最好也不要有空格)

启动执行的文件中不要有下面这种判断,否则可执行文件执行会没有任何效果

if __name__=='__mian__':

1

将exe放到其他机子上运行,弹出“找不到msvcr100.dll“,手动将”msvcr100.dll“拷贝到dist目录下即可

要去掉exe里的后面黑色控制台窗口就在前面的命令改成:

cxfreeze C:\Users\restartRemote.py (需打包文件路径)–target-dir D:\pyproject (存放exe的目标文件夹路径)–base-name=win32gui

nuitka

Nuitka直接将python编译成C++代码,再编译C++代码产生可执行文件,完全不存在反向解析的问题,非常安全,而且由于可执行文件由C++编译而来,运行速度也会获得提升。

但是我在打包中发现了一个文件,那就是在另一台电脑上无法运行…并且实际编译时需要近20分钟,编译的时候cpu持续100%

不过如果只是自己的电脑上运行的话,还是挺好使的

官方文档

注意nuitka对python的某些语法有专门要注意的地方

下载地址

下载完后会提示安装编译c++代码的软件,使用的是gcc

安装好有会有一个MinGW64的文件夹,比如我要打包一个back.py的文件,把这个py文件放在哪个目录下,常用命令如下

python -m nuitka --recurse-all --standalone cc.py

python -m nuitka --standalone back.py

# 可以用的打包方式

python -m nuitka --recurse-all --recurse-plugins=F:\Python27\Lib --remove-output --plugin-enable=enum_compat back.py

# 带图标并且有窗口

python -m nuitka --recurse-all --recurse-plugins=F:\Python27\Lib --remove-output --icon=logo.ico --plugin-enable=enum_compat back.py # 不带窗口不带图标

python -m nuitka --recurse-all --recurse-plugins=F:\Python27\Lib --remove-output --plugin-enable=enum_compat --windows-disable-console back.py

# 不删除辅助文件夹

python -m nuitka --recurse-all --recurse-plugins=F:\Python27\Lib --icon=logo.ico --plugin-enable=enum_compat back.py

# 其他可运行

python -m nuitka --recurse-all --recurse-plugins=F:\Python27\Lib --standalone --remove-output --icon=logo.ico --plugin-enable=enum_compat back.py

在编译的时候大概要挺长时间,并且cpu持续暴涨。

速度…感觉确实变快了点…

代码混淆

你可以自己写混淆器,虽然说是防君子不防小人,但是…罢了不提了…

我使用的是一个在线的代码混淆器,猜测代码会上传到那个服务器上面,所以用或不用看你的需求了

地址

注意:代码规范符合python3

---------------------

原文:https://https://www.360docs.net/doc/fa1881649.html,/lzy98/article/details/83246281

python数据类型

Python 数据类型: 一数字: 1 基本的整数,浮点数的操作。 2 同时还支持进制,位操作和复数常量。不过我们一般编程的话,用到比较少。 二字符串: 1 单引号' 2 双引号'"" 单引号和双引号都是一样的,只是说在2着在嵌套的时候比较好。 比如sql 语句: sql = "select * from info where title='%s' % title 3 三引号''' ''' :三引号的话,主要是文章换行的时候用比较好。可以作为文章批量替换字符的方法。 4 unicode u':由于python 内部是unicode的编码,是中间编码。 ?unicode->其它编码 例如:a为unicode编码要转为gb2312。a.encode('gb2312') ?其它编码->unicode 例如:a为gb2312编码,要转为unicode. unicode(a, 'gb2312')或a.decode('gb2312') ?编码1 -> 编码2 可以先转为unicode再转为编码2 如gb2312转big5 unicode(a, 'gb2312').encode('big5') ?判断字符串的编码 ?如果一个字符串已经是unicode了,再执行unicode转换有时会出错(并不都出错) 可以写一个通用的转成unicode函数: def u(s, encoding): if isinstance(s, unicode): return s else: return unicode(s, encoding)

5 转义字符\s 支持的操作: 1 索引和切片。 索引: 比如a = "info" Print a[1] Print a[1:] 2 字符串格式化,基于字典和关键字替换,这个用处比较大。一般在格式化字符串的时候用到。 三列表 1 列表是有序的集合,类似别的语言的数组的概念。 支持的操作: 1 迭代。 2 插入,排序,翻转代码。 3 分片赋值。 四字典 字典的定义。 字典的常用操作:比如添加,修改,删除。 五元组 1 元组的定义,有序的集合 2 为什么要用元组,用户配置文件的地方。比如你希望文件的一些配置信息不希望被外面的代码修改的话,这个时候就可以用上元组了,比如django的setting.py就大量用到了元组,这样保证了只能在当前页面修改配置,而不是通过外面来修改变量,达到安全的目的。 六文件 文件的读写,迭代功能。 七集合 1 集合的添加,修改,删除功能。 2 集合的交集,并集和差集。 3 集合的应用,比如我现在需要获取一个URL列表的不重复的功能。 八数据类型的差别

python列表(list)操作

列表在python中感觉是最灵活的有序集合对象类型,有点像其他语言的数组的类型 列表可以嵌套,索引和分片操作 嵌套:l3 = ['a',['b','cc']] 索引:l3[1] 分片:l3[2:4] 已知列表:a = [1,2,3,4,5] python list 索引: 列表索引的下标默认是从第0个开始的,比如我们需要获取第1个元素1,那我们可以用a[0].如果需要获取 最后一个元素,那可以通过a[-1]。 1 append()方法 向列表的尾部插入数据 有点像push操作 它可以push大部分数据,比如数字,字符串到列表里, 比如: a.append(6) a.append(7) a.append([1,3]) 如果你要进行列表的合并的话,用下面的extend方法 2 extend()方法

b = ['a','b'] a.extend(b) print a 输出列表a的结果是[1,2,3,4,5,a,b] 3 insert()方法 比如 a.insert(1,66) 输出结果是[1, 66, 2, 3, 4, 5, 'a', 'b'] 4 remove()方法 a.remove(66) 输出的结果是:[1, 2, 3, 4, 5, 'a', 'b'] 删除列表里面指定的值,如果没有的话,报错: Traceback (most recent call last): File " ", line 1, in ValueError: list.remove(x): x not in list 4 pop方法 a.pop() 输出的结果是'b' a.pop(2) 输出的结果是3 如果你没有指定参数的话,默然是返回列表的最后一个字符,如果指定的话,返回当前指定的索引的值 5 index方法 a.index(2)

Python中执行系统命令常见的几种方法

Python中执行系统命令常见的几种方法 (1)os.system #这个方法是直接调用标准C的system()函数,仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息。 os.system(command)->exit_status Execute the command(a string)in a subshell. #如果再命令行下执行,结果直接打印出来 (2)os.popen #该方法不但执行命令还返回执行后的信息对象,是通过一个管道文件将结果返回。 popen(command[,mode='r'[,bufsize]])->pipeOpen a pipe to/from a command returning a file object. 例如: 好处在于:将返回的结果赋于一变量,便于程序的处理。 (3)使用模块commands模块 (status,result)=commands.getstatusoutput(cmd) status返回命令执行的返回值 result返回命令执行结果

注意1:在类unix的系统下使用此方法返回的返回值(status)与脚本或命令执行之后的返回值不等,这是因为调用了os.wait()的缘故,具体原因就得去了解下系统wait()的实现了。需要正确的返回值(status),只需要对返回值进行右移8位操作就可以了。 注意2:当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess。 (4)使用模块subprocess Subprocess是一个功能强大的子进程管理模块,是替换os.system,os.spawn*等方法的一个模块。 Class subprocess.Popen(args,bufsize=0,executable=None,stdin=None,stdout=None, stderr=None,preexec_fn=None, close_fds=True,shell=False,cwd=None,env=None,universal_newlines=False, startupinfo=None, creationflags=0,restore_signals=True,start_new_session=False,pass_fds=()) 有丰富的参数可以进行配置,可供我们自定义的选项多,灵活性高。之前我使用os.system 的时候遇到文件描述符被子进程继承的问题,后来通过close_fds=False这个参数来解决的。

《Python程序设计》习题与答案

《Python程序设计》习题与参考答案 第1章基础知识 1.1 简单说明如何选择正确的Python版本。 答: 在选择Python的时候,一定要先考虑清楚自己学习Python的目的是什么,打算做哪方面的开发,有哪些扩展库可用,这些扩展库最高支持哪个版本的Python,是Python 2.x还是Python 3.x,最高支持到Python 2.7.6还是Python 2.7.9。这些问题都确定以后,再做出自己的选择,这样才能事半功倍,而不至于把大量时间浪费在Python的反复安装和卸载上。同时还应该注意,当更新的Python版本推出之后,不要急于更新,而是应该等确定自己所必须使用的扩展库也推出了较新版本之后再进行更新。 尽管如此,Python 3毕竟是大势所趋,如果您暂时还没想到要做什么行业领域的应用开发,或者仅仅是为了尝试一种新的、好玩的语言,那么请毫不犹豫地选择Python 3.x系列的最高版本(目前是Python 3.4.3)。 1.2 为什么说Python采用的是基于值的内存管理模式? 答: Python采用的是基于值的内存管理方式,如果为不同变量赋值相同值,则在内存中只有一份该值,多个变量指向同一块内存地址,例如下面的代码。 >>> x = 3 >>> id(x) 10417624 >>> y = 3 >>> id(y) 10417624 >>> y = 5 >>> id(y) 10417600 >>> id(x) 10417624 1.3 在Python中导入模块中的对象有哪几种方式? 答:常用的有三种方式,分别为 import 模块名[as 别名]

●from 模块名import 对象名[ as 别名] ●from math import * 1.4 使用pip命令安装numpy、scipy模块。 答:在命令提示符环境下执行下面的命令: pip install numpy pip install scipy 1.5 编写程序,用户输入一个三位以上的整数,输出其百位以上的数字。例如用户输入1234,则程序输出12。(提示:使用整除运算。) 答: 1)Python 3.4.2代码: x = input('Please input an integer of more than 3 digits:') try: x = int(x) x = x//100 if x == 0: print('You must input an integer of more than 3 digits.') else: print(x) except BaseException: print('You must input an integer.') 2)Python 2.7.8代码: import types x = input('Please input an integer of more than 3 digits:') if type(x) != types.IntType: print 'You must input an integer.' elif len(str(x)) != 4: print 'You must input an integer of more than 3 digits.' else: print x//100

Python语句、函数与方法的使用技巧总结

Python语句、函数与方法的使用技巧总结 显示有限的接口到外部 当发布python第三方package时,并不希望代码中所有的函数或者class可以被外部import,在__init__.py中添加__all__属性,该list中填写可以import 的类或者函数名,可以起到限制的import的作用,防止外部import其他函数或者类。 #!/usr/bin/env python # -*- coding: utf-8 -*- from base import APIBase from client import Client from decorator import interface, export, stream from server import Server from storage import Storage from util import (LogFormatter, disable_logging_to_stderr, enable_logging_to_kids, info) __all__ = ['APIBase', 'Client', 'LogFormatter', 'Server', 'Storage', 'disable_logging_to_stderr', 'enable_logging_to_kids', 'export', 'info', 'interface', 'stream'] with的魔力

with语句需要支持上下文管理协议的对象,上下文管理协议包含__enter__和__exit__两个方法。with语句建立运行时上下文需要通过这两个方法执行进入和退出操作。 其中上下文表达式是跟在with之后的表达式,该表达式返回一个上下文管理对象。 # 常见with使用场景 with open("test.txt", "r") as my_file: # 注意, 是__enter__()方法的返回值赋值给了my_file, for line in my_file: print line 知道具体原理,我们可以自定义支持上下文管理协议的类,类中实现__enter__和__exit__方法。 #!/usr/bin/env python # -*- coding: utf-8 -*- class MyWith(object): def __init__(self): print "__init__ method" def __enter__(self):

Python中文件写入读取以及附加文字的代码教程_光环大数据Python培训

https://www.360docs.net/doc/fa1881649.html, Python中文件写入读取以及附加文字的代码教程_光环大数据Python培训Python中文件写入读取以及附加文字的代码教程。 今天学习到python的读取文件部分。 还是以一段代码为例: filename='programming.txt' withopen(filename,'w')asfile_object: file_object.write("Iloveprogramming.\n") file_object.write("Ilovetravelling.\n") 在这里调用open打开文件,两个实参,一个是要打开的文件名称,第二个实参(‘w’)是告诉Python我们要以写入模式打开这个文件。打开文件的时候可以指定读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a')或者读写模式(‘r+’).如果省略了第二个实参,则模式是读取模式。 下面是给文件的内容附加东西的代码。 #发现刚才没有添加完想要添加的东西,可以对其进行附加 withopen(filename,'a')asfile_object:

https://www.360docs.net/doc/fa1881649.html, file_object.write("IalsolovedatabaseandEnglish.\n") file_object.write("Ilovebasketballandswimming.\n") 这里要注意的是,如果要写入的文件不存在,函数open则会自动创建,以(‘w’)模式打开文件的时候千万要小心,因为如果文件已经存在,python将会清空该文件。 使用附加模式(‘a')打开文件的时候,python不会清空源文件,而是你附加的内容都会添加到文件的末尾,如果指定的文件不存在,python将为你创建一个空文件。 为什么大家选择光环大数据! 大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 【报名方式、详情咨询】 光环大数据官方网站报名:https://www.360docs.net/doc/fa1881649.html,/ 手机报名链接:http:// https://www.360docs.net/doc/fa1881649.html, /mobile/

python一些常用方法

1.list 方法 一、创建一个列表 只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示: 与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。 二、访问列表中的值 使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示: print "list1[0]: ", list1[0] print "list2[1:5]: ", list2[1:5] 以上实例输出结果: 三、更新列表 你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项,如下所示: list = ['physics', 'chemistry', 1997, 2000]; print "Value available at index 2 : " print list[2]; list[2] = 2001; print "New value available at index 2 : " print list[2];

以上实例输出结果: 四、删除列表元素 可以使用del 语句来删除列表的的元素,如下实例: list1 = ['physics', 'chemistry', 1997, 2000]; print list1; del list1[2]; print "After deleting value at index 2 : " print list1; 以上实例输出结果: 五、Python列表脚本操作符 列表对+ 和* 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。如下所示: Python 表达式结果描述 len([1, 2, 3])3长度 [1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]组合 ['Hi!'] * 4['Hi!', 'Hi!', 'Hi!', 'Hi!']重复 3 in [1, 2, 3]True元素是否存在于列表中 for x in [1, 2, 3]: print x, 1 2 3迭代

Python中常见的数据结构可以统称为容器

Python中常见的数据结构可以统称为容器(container)。序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器。 一、序列(列表、元组和字符串) 序列中的每个元素都有自己的编号。Python中有6种内建的序列。其中列表和元组是最常见的类型。其他包括字符串、Unicode字符串、buffer对象和xrange对象。下面重点介绍下列表、元组和字符串。 1、列表 列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。 (1)、创建 通过下面的方式即可创建一个列表: 1 2 3 4list1=['hello','world'] print list1 list2=[1,2,3] print list2 输出: […hello?, …world?] [1, 2, 3] 可以看到,这中创建方式非常类似于javascript中的数组。 (2)、list函数 通过list函数(其实list是一种类型而不是函数)对字符串创建列表非常有效: 1 2list3=list("hello") print list3

输出: […h?, …e?, …l?, …l?, …o?] 2、元组 元组与列表一样,也是一种序列,唯一不同的是元组不能被修改(字符串其实也有这种特点)。(1)、创建 1 2 3 4 5 6t1=1,2,3 t2="jeffreyzhao","cnblogs" t3=(1,2,3,4) t4=() t5=(1,) print t1,t2,t3,t4,t5 输出: (1, 2, 3) (…jeffreyzhao?, …cnblogs?) (1, 2, 3, 4) () (1,) 从上面我们可以分析得出: a、逗号分隔一些值,元组自动创建完成; b、元组大部分时候是通过圆括号括起来的; c、空元组可以用没有包含内容的圆括号来表示; d、只含一个值的元组,必须加个逗号(,); (2)、tuple函数 tuple函数和序列的list函数几乎一样:以一个序列(注意是序列)作为参数并把它转换为元组。如果参数就算元组,那么该参数就会原样返回: 1t1=tuple([1,2,3])

python中读写文件及中文编码处理方法

python中读写文件及中文编码处理方法 一、打开文件代码如下:>>> f = open("d:\test.txt", "w")说明:第一个参数是文件名称,包括路径;第二个参数是打开的模式mode'r':只读(缺省。如果文件不存在,则抛出错误)'w':只写(如果文件不存在,则自动创建文件)'a':附加到文件末尾'r+':读写如果需要以二进制方式打开文件,需要在mode后面加上字符"b",比如"rb""wb"等二、读取内容f.read(size)参数size表示读取的数量,可以省略。如果省略size参数,则表示读取文件所有内容。f.readline()读取文件一行的内容f.readlines()读取所有的行到数组里面[line1,line2,...lineN]。在避免将所有文件内容加载到内存中,这种方法常常使用,便于提高效率。三、写入文件f.write(string) 将一个字符串写入文件,如果写入结束,必须在字符串后面加上"\n",然后f.close()关闭文件四、文件中的内容定位f.read()读取之后,文件指针到达文件的末尾,如果再来一次 f.read()将会发现读取的是空内容,如果想再次读取全部内容,必须将定位指针移动到文件开始: f.seek(0)这个函数的格式如下(单位是bytes):f.seek(offset, from_what)from_what 表示开始读取的位置,offset表示从from_what再移动一定量的距离,比如f.seek(10, 3)表示定位到第三个字符并再后移10个字符。from_what值为0时表示文件的开始,它也可以省略,缺省是0即文件开头。下面给出一个完整的例子:>>> f = open('/tmp/workfile', 'r+') >>> f.write('0123456789abcdef') >>> f.seek(5) # Go to the 6th byte in the file >>> f.read(1) '5' >>> f.seek (-3, 2) # Go to the 3rd byte before the end >>> f.read(1) 'd' 五、关闭文件释放资源文件操作完毕,一定要记得关闭文件f.close(),可以释放资源供其他程序使 ******************************************************* 文件读写 只是ASCII或者gbk编码格式的的文件读写,比较简单,读写如下: 1 # coding=gbk 2 3 f = open('c:/intimate.txt','r') # r 指示文件打开模式,即只读 4 s1 = f.read() 5 s2 = f.readline() 6 s3 = f.readlines() #读出所有内容 7 8 f.close() 9 10 f = open('c:/intimate.txt','w') # w 写文件 11 f.write(s1)

Python常见数据结构整理

Python常见数据结构整理 2014年10月15日tenking阅读23 次 Python中常见的数据结构可以统称为容器(container)。序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器。 一、序列(列表、元组和字符串) 序列中的每个元素都有自己的编号。Python中有6种内建的序列。其中列表和元组是最常见的类型。其他包括字符串、Unicode字符串、buffer对象和xrange对象。下面重点介绍下列表、元组和字符串。 1、列表 列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。 (1)、创建 通过下面的方式即可创建一个列表: 1 2 3 4list1=['hello','world'] print list1 list2=[1,2,3] print list2 输出: […hello?, …world?] [1, 2, 3] 可以看到,这中创建方式非常类似于javascript中的数组。(2)、list函数

通过list函数(其实list是一种类型而不是函数)对字符串创建列表非常有效: 1 2list3=list("hello") print list3 输出: […h?, …e?, …l?, …l?, …o?] 2、元组 元组与列表一样,也是一种序列,唯一不同的是元组不能被修改(字符串其实也有这种特点)。(1)、创建 1 2 3 4 5 6t1=1,2,3 t2="jeffreyzhao","cnblogs" t3=(1,2,3,4) t4=() t5=(1,) print t1,t2,t3,t4,t5 输出: (1, 2, 3) (…jeffreyzhao?, …cnblogs?) (1, 2, 3, 4) () (1,)从上面我们可以分析得出: a、逗号分隔一些值,元组自动创建完成; b、元组大部分时候是通过圆括号括起来的; c、空元组可以用没有包含内容的圆括号来表示; d、只含一个值的元组,必须加个逗号(,);(2)、tuple函数

Python常见数据结构整理

Python常见数据结构整理 Python中常见的数据结构可以统称为容器(container)。序列(如列表和元组)、映射(如字典) 以及集合(set)是三类主要的容器。 一、序列(列表、元组和字符串) 序列中的每个元素都有自己的编号。Python中有6种内建的序列。其中列表和元组是最常见的类型。其他包括字符串、Unicode字符串、buffer对象和xrange对象。下面重点介绍下列表、元组和字符串。 1、列表 列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能。 (1)、创建 通过下面的方式即可创建一个列表: 输出: ['hello', 'world'] [1, 2, 3] 可以看到,这中创建方式非常类似于javascript中的数组。 (2)、list函数 通过list函数(其实list是一种类型而不是函数)对字符串创建列表非常有效: 输出: ['h', 'e', 'l', 'l', 'o'] 2、元组 元组与列表一样,也是一种序列,唯一不同的是元组不能被修改(字符串其实也有这种特点)。

输出: (1, 2, 3) ('jeffreyzhao', 'cnblogs') (1, 2, 3, 4) () (1,) 从上面我们可以分析得出: a、逗号分隔一些值,元组自动创建完成; b、元组大部分时候是通过圆括号括起来的; c、空元组可以用没有包含内容的圆括号来表示; d、只含一个值的元组,必须加个逗号(,); (2)、tuple函数 tuple函数和序列的list函数几乎一样:以一个序列(注意是序列)作为参数并把它转换为元组。如果参数就算元组,那么该参数就会原样返回: 输出: (1, 2, 3) ('j', 'e', 'f', 'f') (1, 2, 3) Traceback (most recent call last): File "F:\Python\test.py", line 7, in t4=tuple(123) TypeError: 'int' object is not iterable 3、字符串

python常用函数年初大总结

1.常用内置函数:(不用import就可以直接使用) help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像函数一样调用 repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝 eval_r(str) 表示合法的python表达式,返回这个表达式 dir(obj) 查看obj的name space中可见的name hasattr(obj,name) 查看一个obj的name space中是否有name getattr(obj,name) 得到一个obj的name space中的一个name setattr(obj,name,value) 为一个obj的name space中的一个name指向vale这个object delattr(obj,name) 从obj的name space中删除一个name vars(obj) 返回一个object的name space。用dictionary表示 locals() 返回一个局部name space,用dictionary表示 globals() 返回一个全局name space,用dictionary表示 type(obj) 查看一个obj的类型 isinstance(obj,cls) 查看obj是不是cls的instance issubclass(subcls,supcls) 查看subcls是不是supcls的子类 类型转换函数 chr(i) 把一个ASCII数值,变成字符 ord(i) 把一个字符或者unicode字符,变成ASCII数值 oct(x) 把整数x变成八进制表示的字符串 hex(x) 把整数x变成十六进制表示的字符串

python文件和目录操作方法大全

python文件和目录操作方法大全(含实例) 这篇文章主要介绍了python文件和目录的操作方法,简明总结了文件和目录操作中常用的模块、方法,并列举了一个综合实例,需要的朋友可以参考下 一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件和目录名:os.listdir() 3.函数用来删除一个文件:os.remove() 4.删除多个目录:os.removedirs(r“c:\python”) 5.检验给出的路径是否是一个文件:os.path.isfile() 6.检验给出的路径是否是一个目录:os.path.isdir() 7.判断是否是绝对路径:os.path.isabs() 8.检验给出的路径是否真地存:os.path.exists() 9.返回一个路径的目录名和文件名:os.path.split() eg os.path.split('/home/swaroop/byte/code/poem.txt') 结果:('/home/swaroop/byte/code', 'poem.txt') 10.分离扩展名:os.path.splitext() 11.获取路径名:os.path.dirname() 12.获取文件名:os.path.basename() 13.运行shell命令: os.system() 14.读取和设置环境变量:os.getenv() 与os.putenv() 15.给出当前平台使用的行终止符:os.linesep Windows使用'\r\n',Linux使用'\n'而Mac使用'\r' 16.指示你正在使用的平台:https://www.360docs.net/doc/fa1881649.html, 对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix' 17.重命名:os.rename(old,new) 18.创建多级目录:os.makedirs(r“c:\python\test”) 19.创建单个目录:os.mkdir(“test”) 20.获取文件属性:os.stat(file) 21.修改文件权限与时间戳:os.chmod(file) 22.终止当前进程:os.exit() 23.获取文件大小:os.path.getsize(filename) 二、文件操作方法大全: 1.os.mknod("test.txt") #创建空文件 2.fp = open("test.txt",w) #直接打开一个文件,如果文件不存在则创建文件 3.关于open 模式: 复制代码代码如下: w:以写方式打开, a:以追加模式打开(从EOF 开始, 必要时创建新文件) r+:以读写模式打开 w+:以读写模式打开(参见w ) a+:以读写模式打开(参见a ) rb:以二进制读模式打开

Python程序设计基础教案16--列表类型2

授课教案

授课教案附页 教学设计说明一、旧课回顾 创建一个列表,列表中的元素依次为:姓名、班级,并完成: (1)输出该学生的基本信息(姓名、班级); (2)增加语文成绩 (3)增加英语成绩和数学成绩 (4)将性别这一项插入到姓名后面 (5)修改班级为:software1801 (6)删除语文成绩 任务分析: ?题干: 创建一个列表。考察列表的概念:列表是将各种不同类型的元素用逗号分隔 开,放到一对中括号里构成的数据类型。 创建一个列表,列表中的元素依次为:姓名、班级。 代码示例: ?问题(1):输出该学生的基本信息(姓名、班级) 考察列表中元素访问方法。列表中第i个元素可以用l[i]表示,因此可以使用 for循环,因此访问列表的第0个到第len(l)-1个元素。 代码示例1: 补充:列表本身可以当做一个序列。因此,访问列表中的每一个元素还有另 一种方法。 代码示例2:

方法一:使用range( )产生一个整数序列,表示列表l中每个元素的在列表中的位置(标号),然后用l[i]表示第i个元素。 方法二:直接把列表l本身看做一个序列,此时循环变量i表示列表l中的第i个元素。 ?问题(2):增加语文成绩 考察列表中增加元素的方法。问题(2)仅增加语文成绩,即仅增加一个元素,使用l.append( )方法。 代码示例: ?问题(3):增加英语成绩和数学成绩 考察列表中增加元素的方法。可以使用两次l.append( )方法,依次增加英文成绩和数学成绩。也可以使用l.extend( )函数,将英文成绩和数学成绩作为一个新的列表直接追加都原列表中。 代码示例: ?问题(4):将性别这一项插入到姓名后面 考察l.insert( )的用法。l.insert(i,x):把x查到列表的第i个位置。 代码示例: ?问题(5):修改班级为:software1801 考察里列表元素的修改。l[i]=x:将列表中第i个元素修改为x。

python中readline判断文件读取结束的方法

python中readline判断文件读取结束的方法 本文实例讲述了python中readline判断文件读取结束的方法。分享给大家供大家参考。具体分析如下: 大家知道,python中按行读取文件可以使用readline函数,下面现介绍一个按行遍历读取文件的方法,通过这个方法,展开我们要讨论的问题: 复制代码代码如下:filename = raw_input('Enter your file name') #输入要遍历读取的文件路径及文件名 file = open(filename,'r') done = 0 while not done: aLine = file.readline() if(aLine != ''): print aLine,

else: done = 1 file.close() #关闭文件 上面是我们经常看到的按行遍历一个文件方法,你可能已经注意到我在代码中写的if(aLine != '' ):部分。当readline读取到为空的时候,意味着读到了文件的结束。这个时候,问题就在这里,很多人会想,是不是遇到一个空行,也会被认为是文件的结束呢?这就引入了标题的问题。 事实上,文件的空白行并不会返回一个空行。因为在每一行的末尾还有一个或者多个分隔符,因此“空白行”至少会有一个换行符或者系统使用的其他符号。所以,即使文件中真的包含一个“空白行”,读入的行也不是空的,这就意味着在真实遍历读取到文件结束之前,程序实际上是不会停止的readline() 和.readlines() 非常相似。它们都在类似于以下的结构中使用: Python .readlines() 示例如下:

黑马程序员Python教程:Python列表的6种操作实例

在使用Python的时候,经常会用到列表,列表(list)就是动态数组,相当于C++标准库的Vector。但不同的是,Python的列表可以存储多种数据类型于一身,非常强大。 下面介绍几种Python列表的常用用法: 一. 列表的创建: 使用[] 把数据包含起来,便可以创建一个列表了。 1. [ ] 可以不包含任何数据,则表示创建一个空列表 >>> name = [] 2. [ ] 也可以包含多种数据类型的数据 >>> name = ["damao", 30, "ermao"] 二. 列表的打印: 1. 使用内置函数print() 便可打印整个列表里的数据” >>> print(name) ["damao", 30, "ermao"] 2. 当然也可以打印列表的某个下标的数据: >>> print(name[0]) damao 3. 也可以分片打印列表的某段下标的数据 >>> print(name[0:2])

['damao', 30] #注意,没有打印name[2]的数据:) 4. 如果想要分别打印列表里的每个数据,只需要一个for就可以搞定: >>> for each in name: print(each) damao 30 ermao 5. 当然也可以直接打印出列表内数据的个数: >>> print(len(name)) 3 三、列表的扩展: 1. 我们可以在列表末尾追加一个任意数据类型数据: >>> name.append(["daoluan", 666]) >>> print(name) ['damao', 30, 'ermao', ['daoluan', 666]] 2. 也可以在列表末尾追加一个列表里的所有数据: >>> name.extend(["sanmao", 10, "simao"]) >>> print(name)

python一些常用方法

1.list方法 一、创建一个列表 只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示: 与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。 二、访问列表中的值 使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示: print"list1[0]:",list1[0] print"list2[1:5]:",list2[1:5] 以上实例输出结果: 三、更新列表 你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项,如下所示: list=['physics','chemistry',1997,2000]; print"Value available at index2:" print list[2]; list[2]=2001; print"New value available at index2:" print list[2];

以上实例输出结果: 四、删除列表元素 可以使用del语句来删除列表的的元素,如下实例: list1=['physics','chemistry',1997,2000]; print list1; del list1[2]; print"After deleting value at index2:" print list1; 以上实例输出结果: 五、Python列表脚本操作符 列表对+和*的操作符与字符串相似。+号用于组合列表,*号用于重复列表。如下所示: Python表达式结果描述 len([1,2,3])3长度 [1,2,3]+[4,5,6][1,2,3,4,5,6]组合 ['Hi!']*4['Hi!','Hi!','Hi!','Hi!']重复 3in[1,2,3]True元素是否存在于列表中 for x in[1,2,3]:print x,123迭代

PYTHON文件操作

一、python文件操作 1.import glob目录操作 查看目录内容: filelist=glob.glob(‘*.*’) filelist=glob.glob(‘c:\*’) 查看指定类型的文件: filelist=glob.glob(‘c:\*.sys’) 为了显示一个目录中的全部文件,可以使用如下所示的os.listdir函数: files=os.listdir(r’C:\hpl\scripting\src\py\intro’)#适用于Windows files=os.listdir(’/home/hpl/scripting/src/py/intro’)#适用于Unix files=os.listdir("d:\python26") files=os.listdir("c:\\") #跨平台版本: files=os.listdir(os.path.join(os.environ[’scripting’],’src’,’py’,’intro’)) files=os.listdir(os.curdir)#当前目录中的所有文件 files=glob.glob(’*’)+glob.glob(’.*’) 二、测试文件类型 我们知道,文件名、目录名和链接名都是用一个字符串作为其标识符的,但是给我们一个标识符,我们该如何确定它所指的到底是常规文件文件名、目录名还是链接名呢?这时,我们可以使用os.path模块提供的isfile函数、isdir函数和islink函数来达成我们的目标,如下所示: print myfile,’是一个’, if os.path.isfile(myfile): print’plain file’ if os.path.isdir(myfile): print’directory’ if os.path.islink(myfile): print’link’ 您还可以查找文件的日期及其大小: time_of_last_access=os.path.getatime(myfile) time_of_last_modification=os.path.getmtime(myfile) size=os.path.getsize(myfile) 三文件时间 time_of_last_access=os.path.getatime(myfile) time_of_last_modification=os.path.getmtime(myfile) size=os.path.getsize(myfile) 这里的时间以秒为单位,并且从1970年1月1日开始算起。为了获取以天为单位的最后访问日期,可以使用下列代码: import time#time.time()返回当前时间 age_in_days=(time.time()-time_of_last_access)/(60*60*24) 四文件详细信息 为了获取文件的详细信息,可以使用os.stat函数和stat模块中的其它实用程序来达到目的,如下: import stat

列表list——python

第 I 条列表: 节 1.01创建列表的方式: 1使用赋值运算符直接创建列表 1.1Listname=[元素1,元素2,……,元素n] 2创建空列表 3创建数值列表 节 1.02删除列表del: Is not defined 未被定义 注意:python自带垃圾回收机制,会自动销毁不用的列表,所以即使我们不手动删除,python 也会自动将其回收。 节 1.03访问列表元素:即获取列表中的内容 3种方法:1.直接使用print()输出2.索引Indexing 3.切片Slicing Ctrl +S 保存文件 F5 运行文件

节 1.04遍历列表 方法:1.直接使用for循环(只能输出元素的值) 2.使用for循环和enumerate()函数(需要索引值时) 写两行的: 节 1.05添加元素或列表: 向列表里添加元素所用函数:

1. append(加到列表末尾) Listname.append() 2.insert() (向列表中制定位置插入元素) 没有append的执行效率高 将一个列表添加到另一个列表中的函数extend() (加到原列表的后面) 节 1.06修改元素: 找到索引值,直接修改就行 list1 = ['长亭外','古道边','芳草碧连天'] list1[2] = '一行白鹭上青天' print(list1) 节 1.07删除元素 (a)根据索引删除 和删除列表相似,用del语句 del的使用:del listname[] (语句放前面) (b)根据元素值删除(不知道索引值时) 使用remove()方法 listname.remove() (方法放后面) 节 1.08对列表进行统计 (a)获取制定元素出现的次数count() Llistname.coount(obj) (b)获取制定元素首次出现的下标index() Listname.index(obj)

相关文档
最新文档