第12次全天课-20181014
习题1读一个文件,包含英文句子,请统计共多少个不重复的单词,并且在另外一个文件中打印每个单词以及它的出线次数
#第一步:读文件
#方法1:open
#方法2:with
#难点1:怎么把英文句子中的所有标点去掉。
#数字也要替换掉。
import string
with open("e://a.txt","r") as fp:
content = ""
for line in fp:
s = line
for i in string.punctuation:
s=s.replace(i," ")
content += s
print (content)
word_list = content.split()
print(word_list)
print("一共%s个不重复的单词:" %len(set(word_list)))
word_count = {}
for i in word_list:
if i in word_count:
word_count[i]+=1
else:
word_count[i] =1
print (word_count)
with open("e://b.txt","w") as fp:
fp.write("一共%s个不重复的单词:" %len(set(word_list))+"\n")
for key,value in word_count.items():
fp.write("%s单词出现了%s次" %(key,str(value))+"\n")
习题2,写个记账程序,每天收入多少,支出多少,总额剩多少,使用序列化方式保存信息
#写个记账程序,每天收入多少,支出多少,
#总额剩多少,使用序列化方式保存信息
import pickle
fp = open("e:\\a.txt","rb")
try:
income=pickle.load(fp)
spend=pickle.load(fp)
deposit=pickle.load(fp)
except:
income = []
spend = []
deposit= 0
fp.close()
#value|specification
while 1:
content = input("请输入指令:")
if content.find("exit")!=-1:
break
if content.find("|")==-1:
print("data format is value|specification")
print("please input again!")
continue
value = content.split("|")[0]
try:
value=float(value)
except:
print("data format is value|specification")
print("data format is value must be a number")
if value> 0:
income.append(content)
deposit+=value
elif value==0:
print("空间有限,不存0")
else:
spend.append(content[1:])
deposit+=value
print (income)
print (spend)
print (deposit)
fp = open("e:\\a.txt","wb")
pickle.dump(income,fp)
pickle.dump(spend,fp)
pickle.dump(deposit,fp)
fp.close()
with open("e:\\a.txt",encoding="utf-8") as fp:
for line in fp:
print (line)
file_name = line.split("|",1)[0]
file_content = line.split("|",1)[1]
with open("e:\\test\\"+file_name+".txt","w") as fp1:
fp1.write("|"+file_content+"\n")
with open("D:\\up\\1014\\data.log","r") as fp:
for line in fp:
filename = line[:14]
filecontent = line[14:]
with open("D:\\up\\1014\\"+ filename+".txt","w") as fp2:
fp2.write(filecontent)
目录操作:
>>> os.chdir("subprocesstest")
>>> os.getcwd()
'e:\\test\\subprocesstest'
>>> import os .path
>>> os.path.isdir("subprocesstest")
True
>>> os.path.isfile("subprocesstest")
False
os.path.exists("e:\\a.txt")
windows下面
>>> os.name
'nt'
>>> os.linesep
'\r\n'
>>> os.pathsep
';'
>>> os.sep
'\\'
>>> os.mkdir("subprocess1 ")
>>> os.makedirs("subprocess1/test/test1")
>>> os.removedirs("subprocess1/test/test1")
>>> os.rmdir("subprocess1 ")
shutil. rmtree 清空非空和空的所有
Linux 删除所有的rm –rf /
小练习:删除一个你目录下的所有.txt文件
import os
os.chdir("D:\\up\\test")
pathname = os.listdir()
for i in pathname:
if i[-4:] =”.txt”:
os.remove("D:\\up\\test\\"+i)
时间管理:
1 所有要干的事记录下来(工作、学习、生活的、感情的)
2 打上权重,要事优先。(这可以点自己聚焦)
3 学习(早晨、晚上)
4 效率第一(累了要休息)
5 目标导向:写30行(做5道题)
少睡、早晨起来(买衣服)
办公司对面去。1500*12=1.8万
2小时。1年,涨薪:5k*12=6万
6 工作的时候,大部分的im关掉。定时打开。
1小时看一次。半小时。
7 每天休息和锻炼:10分钟--慢跑
>>> import os
>>> os.rename("e:\\b.txt","e:\\b1.txt")
算法:遍历这个目录,取到所有文件
每个文件用stat取到创建时间
用创建时间和当前时间去比对,是否小于3600
import os
import time
import os.path
current_timestamp = time.time()
result = []
for i in os.listdir("e:\\test"):
if os.path.isfile("e:\\test"+"\\"+i):
print ("e:\\test"+"\\"+i)
if current_timestamp-os.stat("e:\\test"+"\\"+i).st_ctime <=3600:
result.append("e:\\test"+"\\"+i)
print (result)
修改访问时间和修改时间
#encoding=utf-8
import os
os.utime(r'e:\b.txt',(1375448978,1369735977))
fileinfo = os.stat(r'e:\b.txt')
print ("access time of b.txt : %s \n modified time of b.txt: %s" % (fileinfo.st_atime,fileinfo.st_mtime))
os.system()
运行shell命令
>>> os.chdir("/home/wxh")
>>> os.system("ls")
os.environ
获取系统环境变量。
运行shell命令,并返回一个文件对象。然后通过操作文件的方法去操作这个
文件对象。
>>> for i in os.popen("ls"):
... print(i)
>>> import os.path
>>> os.path.join("e:\\test","a.txt")
'e:\\test\\a.txt'
>>> os.path.join("test","a.txt")
'test\\a.txt'
>>> os.path.join("e:\\test","e:\\a.txt")
'e:\\a.txt'
>>> os.path.join(r"e:\test",r"e:\a.txt")
'e:\\a.txt'
遍历某个路径下所有的目录和文件。
os.walk(top, topdown=True, οnerrοr=None, followlinks=False)
#encoding=utf-8
import os
dir_count=0
file_count=0
for root, dirs, files in os.walk("e:\\testdemo",topdown=False) :
print(u"当前目录:",root) #打印目录绝对路径
for name in files :
print(u'文件名:',os.path.join(root,name) )#打印文件绝对路径
file_count+=1
for name in dirs :
print(u'目录名:',name) #打印目录绝对路径
dir_count+=1
print ("目录个数%s" %dir_count)
print ("文件个数%s" %file_count)
小练习,把所有的txt文件干掉。
新建一个空的子目录xxx,放在某个层级下,,把它删掉
#encoding=utf-8
import os
import os.path
dir_count=0
file_count=0
for root, dirs, files in os.walk("e:\\testdemo",topdown=True) :
print(u"当前目录:",root) #打印目录绝对路径
for name in files :
print(u'文件名:',os.path.join(root,name) )#打印文件绝对路径
if name[-4:]==".txt":
os.remove(os.path.join(root,name))
file_count+=1
for name in dirs :
print(u'目录名:',name) #打印目录绝对路径
if name =="xxx":
os.rmdir(os.path.join(root,name))
dir_count+=1
print ("目录个数%s" %dir_count)
print ("文件个数%s" %file_count)
os.path.abspath(path)
拼当前路径
将某个文件下的目录和文件都打印出来
#encoding=utf-8
import os
import os.path
def get_dir_abs_dirpath(dir_path):
result = []
for root,dirs,files in os.walk(dir_path):
for i in dirs:
result.append(os.path.join(root,i))
return result
def get_dir_abs_filepath(dir_path):
result = []
for root,dirs,files in os.walk(dir_path):
for i in files:
result.append(os.path.join(root,i))
return result
print (get_dir_abs_dirpath("e:\\testdemo"))
print (get_dir_abs_filepath("e:\\testdemo"))
os.path.split(path)
将path分割成目录和文件名(事实上,如果你完全使用目录,它也会将最后一个目录作
为文件名而分离,同时它不会判断文件或目录是否存在),并存于元组中返回。
代码示例:
#encoding=utf-8
import os
pathTup = os.path.split(r'c:\gloryroad.txt')
print (pathTup)
>>> os.path.split("e:\\test\\test\\a.py")
('e:\\test\\test', 'a.py')
>>> os.path.dirname("e:\\test\\test\\a.py")
'e:\\test\\test'
>>> os.path.basename("e:\\test\\test\\a.py")
'a.py'
>>> os.path.splitext("e:\\test\\test\\a.py")
('e:\\test\\test\\a', '.py')
统计某个路径下的后缀名
#统计一下某个目录下的,所有不同后缀名的个数,
#以及哪些具体的后缀名
def get_postfix_name_count(dir_path):
result = []
for root,dirs,files in os.walk(dir_path):
for i in files:
postfix_name=os.path.splitext(os.path.join(root,i))[1]
if postfix_name!="":
result.append(postfix_name[1:])
return list(set(result)),len(set(result))
print (get_postfix_name_count("d:\\community"))
os.path.exists(path)
判断path是否存在,如果存在返回True,否则返回False。
>>> if not os.path.exists("e:\\b.txt"):
... with open("e:\\b.txt","w"):
... pass
...
os.path.isabs(path)
判断path是否是绝对路径,如果是返回True,否则返回False。但不会判断实际在不在。
>>> os.path.isabs("e:\\text")
True
os.path.isfile(path)
判断path是否是文件,如果是返回True,否则返回False。
os.path.isdir(path)
判断path是否是目录,如果是目录返回True,否则返回False。
os.path.normpath(path)
将path转换成规范的文件路径。
>>> os.path.normpath("e://a.txt")
'e:\\a.txt'
os.path.getsize(name)
获得文件大小,如果name是目录返回结果是0L或者4096L;如果name代表的目录或文件不存在,会报WindowsError异常。返回字节数。
os.path.getatime(filename)
返回文件的最后访问时间,返回的是时间戳。
代码示例:
#coding=utf-8
import os
import time
#获取文件最后访问时间
lastTime = os.path.getatime(r"d:\gloryroad\a.py")
print (lastTime)
#将时间戳转成时间元组
formatTime = time.localtime(lastTime)
print (formatTime)
#格式化时间元组为时间字符串
print (time.strftime("%Y-%m-%d %H:%M:%S",formatTime))
os.path.getctime(filename)
以时间戳的形式返回文件或目录的创建时间,在Unix系统上是文件最近更改的时间,在Windows上是文件或目录的创建时间。
os.path.getmtime(filename)
在Windows上是文件或目录的修改时间。
sys 模块
sys.argv,不需要在程序里面传参
#coding=utf-8
import os
import time
import sys
print (sys.argv)
def add(a,b):
return a+b
if not len(sys.argv) ==3 :
print("参数数量不对!请指定两个数字参数")
sys.exit()
try:
float(sys.argv[1])
float(sys.argv[2])
except:
print("参数类型不对!请指定两个数字参数")
sys.exit()
print (add(float(sys.argv[1]),float(sys.argv[2])))
#coding=utf-8
import os
import sys
def readfile(filename):
'''Print a file to the standard output.'''
f = open(filename,encoding="utf-8")
while True:
line = f.readline()
if len(line) == 0:
break
print (line,)
f.close()
if len(sys.argv) ==2 and sys.argv[1].startswith('--'):
pass
elif len(sys.argv) <3:
print ('No action specified.')
sys.exit()
for id,i in enumerate(sys.argv):
print ("第%s个参数:%s" %(id,i))
# Script starts from here
if sys.argv[1].startswith('--'):
option = sys.argv[1][2:]
# fetch sys.argv[1] but without the first two characters
if option == 'version':
print('Version 1.2')
elif option == 'help':
print('''"
This program prints files to the standard output.
Any number of files can be specified.
Options include:
--version : Prints the version number
--help : Display this help''')
else:
print('Unknown option.')
sys.exit()
else:
for filename in sys.argv[1:]:
readfile(filename)
枚举
>>> for id ,i in enumerate(range(10,20)):
... print(id,i)