第12次全天课笔记 20181014 目录操作

第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, onerror=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)

 

posted @ 2018-12-04 10:37  feifei_tian  阅读(97)  评论(0编辑  收藏  举报