MSK 发表于 2017-8-5 19:47:26

Python:每日一题 71 (答题领鱼币)

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





又拿来一道题目供大佬们消遣~{:10_248:}




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




题目要求:

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


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




答案:

等待大佬填上这个空白~

新手·ing 发表于 2017-8-5 20:51:29

支持楼楼~

jerryxjr1220 发表于 2017-8-5 22:45:59

那不就等于把B文件夹全删了,然后把A文件夹复制过去...{:10_264:}

彼岸花起舞如火 发表于 2017-8-6 09:16:50

看下答案

MSK 发表于 2017-8-6 09:47:26

jerryxjr1220 发表于 2017-8-5 22:45
那不就等于把B文件夹全删了,然后把A文件夹复制过去...

不可以这样{:10_266:}
而且如果文件很多的话这样是很低效的~

solomonxian 发表于 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) # 删除文件夹

永恒的蓝色梦想 发表于 2019-8-20 11:48:19

MSK 发表于 2017-8-6 09:47
不可以这样
而且如果文件很多的话这样是很低效的~

创建一个快捷方式{:10_266:}

克里斯保罗 发表于 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)
                  
         

13867027703 发表于 2019-12-8 14:17:24

不删完重新复制的话,要是文件名一样内容不一样怎么办?

aironeng 发表于 2020-12-16 09:05:06

学习
页: [1]
查看完整版本: Python:每日一题 71 (答题领鱼币)