题目:A 文件夹下有多个子文件夹(a1 b1 c1),每个子文件夹下有好几张 jpg 图片,需要把这个这些图片全部拷贝并存在 B 文件夹下。
这样写 可以不
# -*- coding: utf-8 -*-
import os,shutil
def movefile(srcfile,dstfile):
fpath,fname=os.path.split(srcfile)
if os.path.isfile(os.path.join(dstfile,fname)):
print("%s exist!"%str(os.path.join(dstfile,fname)))
elif not os.path.isfile(srcfile):
print("%s not exist!")%(srcfile)
else:
fpath,fname=os.path.split(dstfile)
if not os.path.exists(fpath):
os.makedirs(fpath)
shutil.move(srcfile,dstfile)
def getfile(path):
paths = []
for root, dirs, files in os.walk(path):
for file in files:
paths.append(os.path.join(root,file))
return paths
def main():
path = "/path/A"
pathto = "/path/B"
paths = getfile(path)
for pathfrom in paths:
print(pathfrom)
movefile(pathfrom,pathto)
if __name__ == '__main__':
main()
public void copyImages(File from, File to) throws IOException {
if(from == null || to == null) {
throw new RuntimeException("From or To is empty.");
}
if(from.isFile()) {
throw new RuntimeException("From is not directory.");
}
if(to.isFile()) {
throw new RuntimeException("To is not directory.");
}
File[] images = from.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
boolean result = false;
if(pathname.isFile()) {
String path = pathname.getAbsolutePath().toLowerCase();
if(path.lastIndexOf(".jpg") > -1
|| path.lastIndexOf(".png") > -1
|| path.lastIndexOf(".jpeg") > -1
|| path.lastIndexOf(".bmp") > -1) {
result = true;
}
} else {
result = false;
}
return result;
}
});
for(File image : images) {
copyImagesHelper(image, to);
}
File[] dirs = from.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
for(File dir : dirs) {
copyImages(from, to);
}
}
private void copyImagesHelper(File image, File dir) throws IOException {
String cmd =
String.format("cp %s %s", image.getAbsolutePath(), dir.getAbsolutePath());
Runtime runtime = Runtime.getRuntime();
runtime.exec(cmd);
}
这是考 shell?
find ./A/ -maxdepth 2 -name '*.jpg' -exec cp {} ./B \;
for file in `find /A -name "*.jpg"`;do mv $file /B;done
这样写 可以不
# -*- coding: utf-8 -*-
import os,shutil
def movefile(srcfile,dstfile):
fpath,fname=os.path.split(srcfile)
if os.path.isfile(os.path.join(dstfile,fname)):
print("%s exist!"%str(os.path.join(dstfile,fname)))
elif not os.path.isfile(srcfile):
print("%s not exist!")%(srcfile)
else:
fpath,fname=os.path.split(dstfile)
if not os.path.exists(fpath):
os.makedirs(fpath)
shutil.move(srcfile,dstfile)
def getfile(path):
paths = []
for root, dirs, files in os.walk(path):
for file in files:
paths.append(os.path.join(root,file))
return paths
def main():
path = "/path/A"
pathto = "/path/B"
paths = getfile(path)
for pathfrom in paths:
print(pathfrom)
movefile(pathfrom,pathto)
if __name__ == '__main__':
main()
考点就是如何遍历一个文件夹下的文件,需要考虑的是文件路径深度,需要用到递归
是的,你可以对文件格式进行限制
def getfile(path):
paths = []
for root, dirs, files in os.walk(path):
for file in files:
if os.path.splitext(file)[1] == '.jpg':
paths.append(os.path.join(root,file))
return paths
如果是复制的话,把shutil.move()
改成shutil.copy()
即可
请把文件和文件夹区分清除,不知道的还以为是多个文件合并成一个文件呢 [手动笑哭]
我觉得对我来说,难点是操作文件的方法,之前没怎么用过,递归遍历啥的倒是小问题
这个如果是面测试,这个肯定还需要你提问的(考你需求分析),不仅仅是说写个脚本,等你写完了(考你编程熟悉),还会让你针对你写的代码进行测试(考你用例设计),都是套路
public void copyImages(File from, File to) throws IOException {
if(from == null || to == null) {
throw new RuntimeException("From or To is empty.");
}
if(from.isFile()) {
throw new RuntimeException("From is not directory.");
}
if(to.isFile()) {
throw new RuntimeException("To is not directory.");
}
File[] images = from.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
boolean result = false;
if(pathname.isFile()) {
String path = pathname.getAbsolutePath().toLowerCase();
if(path.lastIndexOf(".jpg") > -1
|| path.lastIndexOf(".png") > -1
|| path.lastIndexOf(".jpeg") > -1
|| path.lastIndexOf(".bmp") > -1) {
result = true;
}
} else {
result = false;
}
return result;
}
});
for(File image : images) {
copyImagesHelper(image, to);
}
File[] dirs = from.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
for(File dir : dirs) {
copyImages(from, to);
}
}
private void copyImagesHelper(File image, File dir) throws IOException {
String cmd =
String.format("cp %s %s", image.getAbsolutePath(), dir.getAbsolutePath());
Runtime runtime = Runtime.getRuntime();
runtime.exec(cmd);
}
在想,如果我碰到这个问题,是否能当场给出正确答案?估计不成,因为
但 前提是你不参考任何东西就写代码。但实际工作中好像这种人不多;so,我只能原地爆炸了。
不过打心里还是觉得用 shell 解决这个问题比较好些。
感觉需求不明确呀。
每个子文件夹下有好几张 jpg 图片
这个范围是包含所有级别的子文件夹,还是只需要一级的子文件夹?需要把这个这些图片全部拷贝并存在 B 文件夹下
文件夹结构需要一起拷贝不?没有提及。
for cfile in `find APATH -name "*.jpg"`;do cp $cfile BPATH;done