设置字符串格式:
format % values
>>> x =1/81 >>> print(x) 0.012345679012345678 >>> print('value:%.2f' % x) value:0.01
d #整数
o #八进制
x #小写16进制
X #大写16进制
e #小写科学计数法
E #大写科学计数法
f #浮点数
s #字符串
% #%字符
有多个填充时,以元组的方式指明 在字符串中包含%时必须使用%%
>>> a,b,c='cat',3.1415,6 >>> s = 'There\'s %d %ss older than %.2f years' % (c,a,b) >>> s "There's 6 cats older than 3.14 years"
格式字符串:
{}.format() #将花括号中的内容转换成圆括号中的内容
可以通过命名替换
也可以按位置替换
还可加入转换说明符,要在{}中加:
>>> 'My {pets} has {prob}'.format(pets='dog',prob='fleas') 'My dog has fleas' >>> 'My {0} has {1}'.format('dog','fleas') 'My dog has fleas' >>> '1/81 = {x:.3f}'.format(x=1/81) '1/81 = 0.012'
用大括号来指定格式设置参数,显示{或}时要用{{和}}
>>> 'num = {{{x:.{d}f}}}'.format(x = 1/81, d = 3) 'num = {0.012}'
用r可以得到原始字符串
>>> print('c:\\python') c:\python >>> print(r'c:\python') c:\python
文件和文件夹相关函数:
os.getcwd() #返回当前工作目录的名称
os.listdir(p) #返回一个字符串列表,其中包含路径p指定的文件夹中所有文件和文件夹的名称
os.chdir(p) #将当前工作路径设为p
os.path.isfile(p) #如果p是文件返回True,否则返回False
os.path.isdir(p) #如果p是文件夹返回True,否则返回False
os.stat(fname) #返回有关fname的信息,如大小、最后一次修改时间
#list.py import os def list_cwd(): return os.listdir(os.getcwd()) def files_cwd(): return [p for p in list_cwd() if os.path.isfile(p)] def folders_cwd(): return [p for p in list_cwd() if os.path.isdir(p)]
>>> files_cwd() ['area.py', 'codesum.py', 'count10.py', 'donesum.py', 'extension.py', 'fact.py', 'funny.py', 'global.py', 'greetings.py', 'hello.py', 'list.py', 'name.py', 'numnote.py', 'password1.py', 'reference.py', 'sum.py', 'timestable.py', 'welcome.py', 'yesno.py'] >>> folders_cwd() ['__pycache__']
只获取.py结尾的文件
def list_py(path = None): if path == None: path = os.getcwd() return [fname for fname in os.listdir(path) if os.path.isfile(fname) if fname.endswith('.py')]
>>> list_py() ['area.py', 'codesum.py', 'count10.py', 'donesum.py', 'extension.py', 'fact.py', 'funny.py', 'global.py', 'greetings.py', 'hello.py', 'list.py', 'name.py', 'numnote.py', 'password1.py', 'reference.py', 'sum.py', 'timestable.py', 'welcome.py', 'yesno.py']
获取文件的大小总和:两种写法
def size_in_bytes(fname): return os.stat(fname).st_size def cwd_size_in_bytes(): total = 0 for name in files_cwd(): total = total + size_in_bytes(name) return total def cwd_size_in_bytes2(): return sum(size_in_bytes(f) for f in files_cwd())
>>> cwd_size_in_bytes() 3770 >>> cwd_size_in_bytes2() 3770
文本文件处理:
文件打开模式:
'r' #读取 默认
'w' #写入
'a' #文件末尾附加
'b' #二进制
't' #文本 默认
'+' #读写
默认按行读取 包括最后面的\n
#printfile.py def print_file1(fname): f = open(fname,'r') for line in f: print(line,end = '') f.close()
>>> print_file1('printfile.py') #printfile.py def print_file1(fname): f = open(fname,'r') for line in f: print(line,end = '') f.close()
将整个文本作为一个大字符串来读:
>>> print(open('printfile.py').read()) #printfile.py def print_file1(fname): f = open(fname,'r') for line in f: print(line,end = '') f.close()
写入文本文件:
#write.py import os def make_story2(): if os.path.isfile('story.txt'): #检查是否已存在文件 print('story.txt already exists') else: f = open('story.txt', 'w') f.write('Mary had a litte lamb,\n') f.write('and then she had some more.')
>>> make_story2() >>> make_story2() story.txt already exists
在末尾添加
def add_to_story(line, fname ='story.txt'): f = open(fname, 'a') f.write(line)
>>> add_to_story('HaHaHa!!\n')
在文件开头添加,必须把文件重写 注意要用fseek(0)
def insert_title(title, fname = 'story.txt'): f = open(fname,'r+') temp = f.read() temp = title + '\n\n' + temp f.seek(0) #让文件指向文件开头 f.write(temp)
>>> insert_title(" Story ")
最终story.txt的内容是
Story Mary had a litte lamb, and then she had some more.HaHaHa!!
用二进制方式打开文件:
判断文件是否为gif
def is_gif(fname): f = open(fname,'br') first4 = tuple(f.read(4)) return first4 == (0x47,0x49,0x46,0x38)
>>> is_gif('1.gif') True
pickle.dump #可用来存储数据
pickle.load #可用来获取数据
#picklefile.py import pickle def make_make_pickled_file(): grades = {'a':[4,5,6], 'b':[0,1,2], 'c':[8,9,7]} outfile = open('grades.dat','wb') pickle.dump(grades,outfile) def get_pickled_data(): infile = open('grades.dat','rb') grades = pickle.load(infile) return grades
>>> make_make_pickled_file() >>> a = get_pickled_data() >>> a {'a': [4, 5, 6], 'c': [8, 9, 7], 'b': [0, 1, 2]}
pickle可以存储函数,但不能读写特殊形式的二进制文件如GIF文件
shelve模块有存储和检索数据更高级的方法
sqlite3模块提供了访问SQLite数据库的接口
读取网页
>>> import urllib.request >>> page = urllib.request.urlopen('http://python.org') >>> html = page.read() >>> html[:30] b'<!doctype html>\n<!--[if lt IE '
下面的代码可以在默认浏览器中打开页面;
>>> import webbrowser >>> webbrowser.open('http://www.baidu.com') True