print用法
print会输出一个\n,也就是换行符,这样光标移动到了下一行行首,接着输出,之前已经通过stdout输出的东西依旧保留,而且保证我们在下面看到最新的输出结果。
回车 \r 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return
换行 \n 本义是光标往下一行(不一定到下一行行首),控制字符可以写成LF,即Line Feed
这里的换行会因不同系统而不同windows的换行是\r\n,unix的是\n,mac的是\n。在不同的操作系统这几个字符表现不同,比如在WIN系统下,这两个字符就是表现的本义,在UNIX类系统,换行\n就表现为光标下一行并回到行首,在MAC上,\r就表现为回到本行开头并往下一行,至于ENTER键的定义是与操作系统有关的。通常用的Enter是两个加起来。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
1、输出进度条
要想输出进度条,我们必须再原地输出才能保证他是一个进度条,最简单的办法就是再输出完毕后把光标移动到行首,继续在那里输出更长的进度条即可实现,新的更长的进度条把旧的短覆盖,就形成了动画效果。转义符\r就可以把光标移动到行首而不换行,转义符\n就把光标移动到行首并且换行。
在python中,输出stdout(标准输出)可以使用sys.stdout.write
import
time
import
sys
for
i
in
range
(
101
):
sys.stdout.write(
'\r'
)
sys.stdout.write(
"%s%% |%s"
%
(
int
(i
%
101
),
int
(i
%
101
)
*
'#'
))
sys.stdout.flush()
time.sleep(
0.5
)
sys.stdout.write(
'\n'
)
2、输出三角形
#左上三角格式输出九九乘法表
for i in range(1,10):
for j in range(i,10):
print("%d*%d=%2d" % (i,j,i*j),end=" ")
print("")
注:乘法算式按行输出,与完整格式相比,内层循环范围为i~9,当外层循环的i逐渐递增时,每行输出的算式个数会越来越少,print("")表示换行,不输出这句的话输出的乘法表格式错乱。
#右上三角格式输出九九乘法表
for i in range(1,10):
for k in range(1,i):
print (end=" ")
for j in range(i,10):
print("%d*%d=%2d" % (i,j,i*j),end=" ")
print("")
注:相比左上三角形,内层循环语句多了两句(代码标红处),由于每个算式所占的位置为7个字节,所以多余前面空出的地方输出相应的空格数,在Python中不能直接写print(" ")语句表示输出空格,必须添加end关键字,表示结尾以等号右边的内容输出,与后面的右上和左上的差别相似。
等腰三角形
import sys
print('请输入打印行数:')
x=input()
x=int(x)
for i in range(x):
for j in range(0, x - i):
print(end=" ")
for k in range(x - i, x):
print("▲", end=" ")
print("")
3、输出图形打印X型
O.....O .O...O. ..O.O.. ...O... ..O.O.. .O...O. O.....O
for line in range(0,3): for star in range(line): print(".",end="") print("O",end="") for star in range(5-2*line): print(".",end="") print("O",end="") for star in range(line): print(".",end="") print() for line in range(1,2): for star in range(3): print(".",end="") print("O",end="") for star in range(3): print(".",end="") print() for line in range(2,-1,-1): for star in range(line): print(".",end="") print("O",end="") for star in range(5-2*line): print(".",end="") print("O",end="") for star in range(line): print(".",end="") print()
杨辉三角定义如下:
1
/ \
1 1
/ \ / \
1 2 1
/ \ / \ / \
1 3 3 1
/ \ / \ / \ / \
1 4 6 4 1
/ \ / \ / \ / \ / \
1 5 10 10 5 1
把每一行看做一个list,试写一个generator,不断输出下一行的list。
一般的思路是,首先在每一行输出一个1,随后通过循环,位置i(从2开始)的数是上一行i与i-1位置的数之和,当i与上一行数字个数相同时,循环终止,最后再添加进一个1,形成新的一行。
一种写法如下:
def triangles():#杨辉三角的一种生成方法
l = [1]
while True :
yield l
for i in range ( 1,len (l) ) :
l [i] = h [i] + h [i-1]
l.append (1)
h = l[:]
一开始h里面没有数,却也能够正常执行?主要是对于生成器的yield机制不明白,以及对于range的用法不是特别清楚。以下就这两点分别解释。首先,当函数中出现了yield之后,该函数就不再被视为函数,而视为一个生成器。此时,整个函数被使用的语句流程会发生改变,一般的函数都是调用的时候从函数入口进,发现return或函数执行完毕后返回,而生成器函数则是每次调用函数执行,执行到yield返回,下次再调用函数的时候从上次yield返回处继续执行。其次,range的用法中是,如果是【range(x,x)其中x是常量】的形式,range依然返回空。故在上述代码的for循环中,由于在第一次试图循环的时候,后面的range要么是range(1,1)要么是range(0),故都会成功避开i或者h没有实际值的循环,执行接下来的部分。当第二次试图循环开始时,i和h内的内容都已经满足条件了,所以就能正常运行了。
另外一种写法如下,运用了list的生成式:
def triangles():
L = [1]
while True:
yield L
L= [(L + [0])[i] + ([0] + L)[i] for i in range(len(L)+1)]
格式符
格式符为真实值预留位置,并控制显示的格式。格式符可以包含有一个类型码,用以控制显示的类型,如下:
%s 字符串 (采用str()的显示)
%r 字符串 (采用repr()的显示)
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为e)
%E 指数 (基底写为E)
%f 浮点数
%F 浮点数,与上相同
%g 指数(e)或浮点数 (根据显示长度)
%G 指数(E)或浮点数 (根据显示长度)
Python逐行读取文件内容的方法
方法一:readline函数
f
=
open
(
"/pythontab/code.txt"
)
#返回一个文件对象
line
=
f.readline()
#调用文件的 readline()方法
while
line:
print
(line, end
=
'')
# 在Python3中使用,end =''忽略换行符
line
=
f.readline()
f.close()
缺点:速度相对较慢优点:节省内存,不需要一次性把文件内容放入内存中
方法二:一次读取多行数据
f
=
open
(
"/pythontab/code.txt"
)
while
1
:
lines
=
f.readlines(
10000
)
if
not
lines:
break
for
line
in
lines:
print
(line)
f.close()
一次性读取多行,可以提升读取速度,但内存使用稍大, 可根据情况调整一次读取的行数
方法三:直接for循环
在Python 2.2以后,我们可以直接对一个file对象使用for循环读每行数据
for
line
in
open
(
"/pythontab/code.txt"
):
print
(line)
python调用其他程序
Python3中调用cmd/shell命令有:os(os.system、os.popen。第一个无法获得返回值,第二可以获取)模块和subprocess(subprocess.call)。
os.system()方法
Import os
os.system('ipconfig')
如果要向程序或者脚本传递参数,可以使用空格分隔程序及多个参数。
启动电脑中的网易云音乐
import os
os.system(r'"D:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe"')
这段代码会启动网易云音乐,效果和我们在cmd窗口中输入 "D:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe" 效果一样。注意字符串中含有空格,所以有 r''。
subprocess.call()方法
(1) call
执行命令,返回状态码(命令正常执行返回0,报错则返回1)
import subprocess
subprocess.call("C:\\Program Files (x86)\\Notepad++\\notepad++.exe")
ret = subprocess.call(["ls", "-l"], shell=False) #shell为False的时候命令必须分开写
ret = subprocess.call("ls -l", shell=True)
(2) check_call
执行命令,如果执行成功则返回状态码0,否则抛异常
subprocess.check_call(["ls", "-l"])
subprocess.check_call("exit 1", shell=True)
(3) check_output
执行命令,如果执行成功则返回执行结果,否则抛异常
subprocess.check_output(["echo", "Hello World!"])
subprocess.check_output("exit 1", shell=True)
(4) subprocess.Popen(...)
用于执行复杂的系统命令
import subprocess
obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',) #在cwd目录下执行命令
参数 |
注释 |
args |
shell命令,可以是字符串或者序列类型(如:list,元组) |
bufsize |
指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲 |
stdin, stdout, stderr |
分别表示程序的标准输入、输出、错误句柄 |
preexec_fn |
只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用 |
close_sfs |
在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。 |
shell |
同上 |
cwd |
用于设置子进程的当前目录 |
env |
用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。 |
universal_newlines |
不同系统的换行符不同,True -> 同意使用 \n |
startupinfo |
只在windows下有效,将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等 |
createionflags |
同上 |
1、卸载android手机中安装的所有第三方应用
主要是使用adb shell pm、adb uninstall 命令
import os
def uninstall():
os.popen("adb wait-for-device")
print( "start uninstall...")
for packages in os.popen("adb shell pm list packages -3").readlines():
packageName = packages.split(":")[-1].splitlines()[0]
os.popen("adb uninstall " + packageName)
print "uninstall " + packageName + " successed."
if __name__ == "__main__":
uninstall()
print " "
print "All the third-party applications uninstall successed."
2、给安卓手机安装apk
创建一文件夹,放入要安装的所有apk文件,创建一文件以py为后缀,复制以下代码:
import os
files = os.listdir(r'.')
for file in files:
# print(file + str(len(file)) + "---" + file[1])
# print(file[len(file)-3:len(file)])
# print(file[len(file)-3:len(file)])
if file[len(file)-3:len(file)] == "apk":
#the string variable which is to storage the command will excute later
string='adb install ' + "\"" + file + "\""
print(string)
os.system(string)
(注意:“\“” + file + "\"" , 这段代码,为了防止file的值含有空格,导致调用cmd命令安装失败,其次,apk不能为中文名,否则安装会出错)
双击文件,apk就已经安装到手机上了。
3、清理某路径下所有文件及文件夹的代码如下:
1 import os 3 dirToBeEmptied = 'D:\_Data\Python\os' #需要清空的文件夹 4 5 ds = list(os.walk(dirToBeEmptied)) #获得所有文件夹的信息列表 6 dsr = ds[::-1] #反转该列表,从最底层的文件夹开始清算 7 8 for d in dsr: #遍历该列表 9 print(d) #打印出列表项,观察规律 10 if d[2] != []: #如果该路径下有文件 11 for x in d[2]: #先将文件清理干净 12 os.remove(os.path.join(d[0], x)) 13 for d in dsr: #再次遍历该列表 14 if d[1] != []: #如果该路径下有子文件夹 15 for y in d[1]: #将子文件夹清理干净 16 os.rmdir(os.path.join(d[0], y))
之所以这么麻烦,是因为 os.rmdir() 有个毛病,只能删除“空”文件夹。所以只能从最底层的文件夹开始清理,一级一级往上,才能清干净。
python中format函数用于字符串的格式化
通过关键字
1 print('{名字}今天{动作}'.format(名字='陈某某',动作='拍视频'))#通过关键字 2 grade = {'name' : '陈某某', 'fenshu': '59'} 3 print('{name}电工考了{fenshu}'.format(**grade))#通过关键字,可用字典当关键字传入值时,在字典前加**即可
通过位置
1 print('{1}今天{0}'.format('拍视频','陈某某'))#通过位置 2 print('{0}今天{1}'.format('陈某某','拍视频'))
填充和对齐
1 print('{:^14}'.format('陈某某')) #居中
2 print('{:>14}'.format('陈某某')) #右对齐
3 print('{:<14}'.format('陈某某')) #左对齐
4 print('{:*<14}'.format('陈某某')) #右填充
5 print('{:*>14}'.format('陈某某')) #左填充
精度和类型f精度常和f一起使用
1 print('{:.1f}'.format(4.234324525254)) 2 print('{:.4f}'.format(4.1))
进制转化,b o d x 分别表示二、八、十、十六进制
print('{:b}'.format(250)) print('{:o}'.format(250)) print('{:d}'.format(250)) print('{:x}'.format(250))
千分位分隔符,这种情况只针对与数字
print('{:,}'.format(100000000)) print('{:,}'.format(235445.234235))
Python中的正斜杠与反斜杠
首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Windows
(一)目录中的斜杠们
python读文件需要输入的目录参数,列出以下例子:
path = r"C:\Windows\temp\readme.txt"
path1 = r"c:\windows\temp\readme.txt"
path2 = "c:\\windows\\temp\\readme.txt"
path3 = "c:/windows/temp/readme.txt"
打开文件函数open()中的参数可以是path也可以是path1、path2、path3。
path:"\"为字符串中的特殊字符,加上r后变为原始字符串,则不会对字符串中的"\t"、"\r" 进行字符串转义
path1:大小写不影响windows定位到文件
path2:用一个"\"取消第二个"\"的特殊转义作用,即为"\\"
path3:用正斜杠做目录分隔符也可以转到对应目录,并且在python中path3的方式也省去了反斜杠\转义的烦恼
python中以r或R开头的的字符串表示为非转义的原始字符串,比如:(r’^time/plus/\d{1,2}/$’, hours_ahead)