Python:每日一题 71 (答题领鱼币)
本帖最后由 新手·ing 于 2017-8-17 12:27 编辑又拿来一道题目供大佬们消遣~{:10_248:}
今天对大家的要求就是在完成题目的同时,尽量做到 简洁!
题目要求:
现有两个文件夹 A 和 B,要求写一个程序将 A 文件夹的文件同步到 B文件夹~
[*] 如果 B文件夹里有A没有的文件或目录, 在B中执行删除操作
[*] 如果 B 文件夹里没有 A 拥有的文件或目录, 执行复制操作
答案:
等待大佬填上这个空白~ 支持楼楼~ 那不就等于把B文件夹全删了,然后把A文件夹复制过去...{:10_264:} 看下答案
jerryxjr1220 发表于 2017-8-5 22:45
那不就等于把B文件夹全删了,然后把A文件夹复制过去...
不可以这样{:10_266:}
而且如果文件很多的话这样是很低效的~ 假设只比较文件名、文件夹名,不考虑内容
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) # 删除文件夹 MSK 发表于 2017-8-6 09:47
不可以这样
而且如果文件很多的话这样是很低效的~
创建一个快捷方式{:10_266:} 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)
不删完重新复制的话,要是文件名一样内容不一样怎么办? 学习
页:
[1]