一些函数
输出字符串,列表等
print('hello')
print(str1,str2,str3) #连接输出,中间以空格隔开
print(list)
print每执行一次,输出后最后默认加一个回车,可以print(str1,edn=’结束内容’),指定输出后的内容
>>> print('a');print('b')
a
b
>>> print('a',end='');print('b')
ab
>>> print('a',end=' ');print('b')
a b
print输出不换行, 则指定end=''
格式化输出
- %s — 字符串
- %d — dec十进制
- %x — hex 十六进制
- %d — dec 十进制
- %o — oct 八进制
- %f — 浮点数
- %m.nf — 整数部分m个,不够补空格,小数部分n个
str.zfill(n)
在前面补0凑够n位
更多格式先略
>>> print('%x' %23)
17
>>> str='hello,%d,%x,%o' %(45,45,45)
>>> print(str)
hello,45,2d,55
>>> str(2.2).zfill(4)
'02.2'
>>> str('21').zfill(4)
'0021'
>>> str('ab').zfill(4)
'00ab'
format
Python2.6 开始,新增了一种格式化字符串的函数 str.format()
基本语法是通过{}
和:
来代替以前的%
用于print(str.format())
格式化输出很好
以下语法摘自参考菜鸟教程
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
>>> "{0} {1}".format("hello", "world") # 设置指定位置
'hello world'
>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
'world hello world'
也可设置参数
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))
# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的
数字格式
进制
文件操作
文件读写
推荐使用with打开,这样在遇到文件读写IOError时会自动调用f.close(),保证文件正常关闭
with open(文件名,模式) as f:
print(f.read())
打开文件
open(文件名,模式)
#如
f=open('../test.txt','w')
- 文件名使用字符串,支持绝对路径相对路径
- 模式(引自传智播客)
访问模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
--- | ----------- |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
--- | ----------- |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
--- | ----------- |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
关闭文件
f.close()
写入数据
写入后文件中的光标自动移位
f = open('test.txt', 'w')
f.write('hello world, i am here!')
f.close()
读取数据
读取后文件中的光标自动移位
- read(N) 读取N个字符,无N读取所有
- readlines() 一次性读取,每行为一个字符串组成list
- readline() 读取一行,返回字符串
f = open('test.txt', 'r') con=f.read() f.close()
大文件时,逐行读取然后复制写入
读写位置
- tell()
- seek(offset,from)
seek偏移量
from:起始位置:0文件开头1当前位置2文件末尾#统计行数,并移至开头 f=open(inputfile) rownum=len(f.readlines()) ierror=f.seek(0,0)
示例
with open(inputfile,'r') as f:
for i in np.arange(4): f.readline() #跳过前4行
#读入剩下所有数据
data=[ [ float(i) for i in line.split() ] for line in f.readlines() ]
data=np.array(data)
spectrum=data[:,[0,2,3,4]] #提取一些数据
判断文件是否读至结尾
line=f.readline()
if not line: #等价于if line == "":
break
加速文件读取速度
用readlines()比for循环readline快太多了,下面多次重复测试,readlines的速度都是9s左右,很快
读入后split
再变成数字的numpy,还真是readline()
最快,没找到加速方法….
os模块
文件重命名删除
import os
os.rename("old_name","new_name")
os.remove("name")
os.mkdir("目录名")
os.getcwd() #获取当前路径
os.chdir("路径")
os.listdir("路径") #ls
os.rmdir("目录名") #rmdir
os.path.exists("文件/目录") #检查文件/目录是否存在
os.path.isfile("文件") #检查文件是否存在
非空目录不能删除,使用下面删除
import shutil
shutil.rmtree(banddir, ignore_errors=True)
执行系统命令
>>> b=os.system("grep a_1 "+inputfile)
a_1 11.999994 0.000000 0.000000
>>> b
0
>>> b=os.popen("grep a_1 "+inputfile)
>>> b.readlines()
[' a_1 11.999994 0.000000 0.000000\n']
获取进程pid
>>> os.getpid() #当前进程
66021
>>> os.getppid() #父进程
61928
其他有趣
更新屏幕上的内容
不断刷新,如显示进度条
sys.stdout.write("\rReadming wfc(%4.2f%%)"%( (ik*nbnd+ibnd+1)/(nkstot*nbnd)*100.0 )+end )
报错
文件中有特殊的字符,删除
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa6 in position 595: invalid start byte
特殊字符
!¦¤t=t2?t1 for the calculation of Uk(t2,t1) in tddft, 1 a.u.=0.048378 fs
本文首发于我的博客@cndaqiang.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!