鱼C论坛

 找回密码
 立即注册
查看: 3968|回复: 9

[技术交流] Python:每日一题 71 (答题领鱼币)

[复制链接]
发表于 2017-8-5 19:47:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 新手·ing 于 2017-8-17 12:27 编辑



img.jpg

又拿来一道题目供大佬们消遣~






今天对大家的要求就是在完成题目的同时,尽量做到 简洁!





题目要求:

现有两个文件夹 A 和 B,要求写一个程序将 A 文件夹的文件同步到 B文件夹~

  • 如果 B文件夹里有A没有的文件或目录, 在B中执行删除操作
  • 如果 B 文件夹里没有 A 拥有的文件或目录, 执行复制操作





    答案:

    等待大佬填上这个空白~
  • 本帖被以下淘专辑推荐:

    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复

    使用道具 举报

    发表于 2017-8-5 20:51:29 | 显示全部楼层
    支持楼楼~
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2017-8-5 22:45:59 | 显示全部楼层
    那不就等于把B文件夹全删了,然后把A文件夹复制过去...
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2017-8-6 09:16:50 | 显示全部楼层
    看下答案
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2017-8-6 09:47:26 | 显示全部楼层
    jerryxjr1220 发表于 2017-8-5 22:45
    那不就等于把B文件夹全删了,然后把A文件夹复制过去...

    不可以这样
    而且如果文件很多的话这样是很低效的~
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2017-8-17 19:25:46 | 显示全部楼层
    假设只比较文件名、文件夹名,不考虑内容
    import os
    import shutil
    
    dir_A = input("请输入需要同步的文件夹完整路径:")  # 完整路径
    dir_B = input("请输入同步到的目标文件夹完整路径:")
    
    dir_A += "\"
    dir_B += "\"
    
    set_A = set(os.listdir(dir_A)) # 文件名集合
    set_B = set(os.listdir(dir_B))
    
    for i in (set_A - set_B): 
        if os.path.isfile(dir_A +i): 
            shutil.copy(dir_A +i, dir_B) # 拷贝文件
        else:
            shutil.copytree(dir_A +i, dir_B +i) # 拷贝文件夹
            
    for j in (set_B - set_A):
        if os.path.isfile(dir_B +j):  
            os.remove(dir_B +j) # 删除文件
        else:
            shutil.rmtree(dir_B +j) # 删除文件夹

    评分

    参与人数 1荣誉 +4 鱼币 +4 收起 理由
    MSK + 4 + 4 支持楼主!

    查看全部评分

    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2019-8-20 11:48:19 | 显示全部楼层
    MSK 发表于 2017-8-6 09:47
    不可以这样
    而且如果文件很多的话这样是很低效的~

    创建一个快捷方式
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2019-9-22 23:31:01 | 显示全部楼层
    import os
    
    def func():
              a = os.listdir(r'A')
              b = os.listdir(r'B')
              for each in b:
                        if each not in a:
                                  os.remove(r'B/'+each)
              for each in a:
                        if each not in B:
                                  with open(r'B/'+each) with pt:
                                            with open(r'A/'+each) with pl:
                                                      pt.write(pl)
                        
              
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2019-12-8 14:17:24 | 显示全部楼层
    不删完重新复制的话,要是文件名一样内容不一样怎么办?
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复 支持 反对

    使用道具 举报

    发表于 2020-12-16 09:05:06 | 显示全部楼层
    学习
    想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

    GMT+8, 2025-1-17 01:01

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表