20181205Python 自动化笔试题,挑战你的知识库

1:获取当前目录下所有文件,然后做如下处理:

  1. 文件名去重复。
  2. 选出文件大于 10m 的
  3. 获取到文件的 md5 值,然后利用这个 md5 值对文件名进行重命名(其中 md5 代表一个文件属性)
  4. 打印出最后的符合条件的所有文件名

温馨提示:

  1. 我们是要获取所有的文件 而不是目录
  2. 去重复不是删除文件,而是对重复的文件名进行重命名
  3. 想办法获取文件的 md5 值
  4. 最好是函数的形式实现哦
1 操作
huahua 在 2020-08-07 21:52:58 更新了该帖
18 回帖
请输入回帖内容 ...
  • huahua

    😎 先来点赞!

  • 其他回帖
  • liangwuliu062
    
    

    mport os
    import hashlib

    def filename_distinct(file_path):
    # 获取目录下的所有文件并去重
    files=[]
    for root, dirs, file in os.walk(file_path):
    '''file 为循环遍历的每一个目录下的文件,存储为列表形式'''
    files+=file # 每个文件夹下的文件名列表相加,获取所有文件
    # 对所有文件名去重并重命名重复的文件名,循环遍历,两两对比
    for i in range(len(files)-1):
    for j in range(i,len(files)-1):
    if files[i]==files[j+1]: # 如果文件名重复
    '''为重复的文件名中的一个重命名,加上循环遍历的 i,j 保证重命名后文件名不会再重复'''
    files[i]=str(i)+str(j)+files[i]
    # print('所有文件名——去重后:',files)
    return files

    def file_md5(file_path):
    # 获取文件的 md5 属性
    if os.path.isfile(file_path):
    fp = open(file_path, 'rb')
    contents = fp.read()
    fp.close()
    md5_1 = hashlib.md5(contents).hexdigest()
    else:
    print('file not exists')
    return md5_1

    def get_big_file(file_path,size):
    # 获取大于指定 size 的文件,单位为 M
    big_file=[]
    for fpathe,dirs,fs in os.walk(file_path): # 遍历目录下的所有文件
    for f in fs:
    file_path=os.path.join(fpathe,f) # 文件的绝对路径
    if os.path.getsize(file_path)>10241024size:
    big_file.append(file_path) # 获取到大于 10M 的文件绝对路径列表
    return big_file

    if name == 'main':
    file_path='C:\Users\liang\Desktop\新建文件夹'
    bigfile=get_big_file(file_path,10)
    print(filename_distinct(file_path))
    print(bigfile)
    md5file=[]
    for file_name in bigfile:
    md5file.append(file_md5(file_name))
    print(md5file)

  • D_Sai
    import os
    import hashlib
    
    class MyFile:
        '''文件夹类'''
    
        def __init__(self, myPath):
            self.rootPath = myPath
    
        def del_files(self):
            '''遍历文件夹'''
            for root, dirs, files in os.walk(self.rootPath):#逐层遍历文件夹
                for file in files:#遍历每一个文件
                    File1.append(os.path.join(root, file))#每一个文件放在总的列表下
                    fileSize = os.path.getsize(os.path.join(root, file))
                    if fileSize >= 10*1024*1024:
                        File2.append(os.path.join(root, file))
            #文件名去重
            for item in File1:
                if item not in File3:
                    md = self.get_file_md5(item)
                    File3.append(item)
                else:
                    self.get_file_md5(item)
                    File4.append(md)
    
        def get_file_md5(slef, filename):
            '''得到每个文件的md5'''
            md5 = None
            if os.path.isfile(filename):
                f = open(filename, "rb")
                fileMd5 = hashlib.md5()
                fileMd5.update(f.read())
                hashCode = fileMd5.hexdigest()
                f.close()
                md5 = str(hashCode).lower()
                return md5
            else:
                print("这不是一个文件,请重新确认路径。")
                return
    
    
    if __name__ == '__main__':
        File1 = []  # 获取所有带路径文件名
        File2 = []  # 获取大于10M的带路径文件名
        File3 = []  # 获取去重后的带路径文件名
        File4 = []  # 存放重复名字md5
        myFile = MyFile(r'C:\Users\admin\Desktop\柠檬班书籍')
        myFile.del_files()
        print("File1:", File1)
        print("File2", File2)
        print("File3", File3)
        print("File4", File4)
    
  • liangwuliu062
    
    import os
    import hashlib
    
    def filename_distinct(file_path):
        #获取目录下的所有文件并去重
        files=[]
        for root, dirs, file in os.walk(file_path):
            '''file为循环遍历的每一个目录下的文件,存储为列表形式'''
            files+=file  #每个文件夹下的文件名列表相加,获取所有文件
        #对所有文件名去重并重命名重复的文件名,循环遍历,两两对比
        for i in range(len(files)-1):
            for j in range(i,len(files)-1):
                if files[i]==files[j+1]:  #如果文件名重复
                    '''为重复的文件名中的一个重命名,加上循环遍历的i,j保证重命名后文件名不会再重复'''
                    files[i]=str(i)+str(j)+files[i]
        # print('所有文件名——去重后:',files)
        return files
    
    def file_md5(file_path):
        #获取文件的md5属性
        if os.path.isfile(file_path):
            fp = open(file_path, 'rb')
            contents = fp.read()
            fp.close()
            md5_1 = hashlib.md5(contents).hexdigest()
        else:
             print('file not exists')
        return md5_1
    
    def get_big_file(file_path,size):
        #获取大于指定size的文件,单位为M
        big_file=[]
        for fpathe,dirs,fs in os.walk(file_path):   #遍历目录下的所有文件
            for f in fs:
                file_path=os.path.join(fpathe,f)  #文件的绝对路径
                if os.path.getsize(file_path)>1024*1024*size:
                    big_file.append(file_path)  #获取到大于10M的文件绝对路径列表
        return big_file
    
    if __name__ == '__main__':
        file_path='C:\\Users\\liang\\Desktop\\新建文件夹'
        bigfile=get_big_file(file_path,10)
        print(filename_distinct(file_path))
        print(bigfile)
        md5file=[]
        for file_name in bigfile:
            md5file.append(file_md5(file_name))
        print(md5file)
    
    ```python
    
    
  • 查看更多回帖