1. 程式人生 > 其它 >一道有趣的大廠測試面試題,你能用 Python or Shell 解答嗎?

一道有趣的大廠測試面試題,你能用 Python or Shell 解答嗎?

⬇️ 點選“下方連結”,提升測試核心競爭力!

>>更多技術文章分享和免費資料領取原文連結
本文是測試開發工程師Venn同學面試某網際網路名企遇到的一道面試題目,首發於Testerhome社群,引發了有趣的討論和解答,供各位測試同學參考。連結:https://testerhome.com/topics/18337

一道有趣的測試面試題目

題目:在A資料夾下有多個子資料夾(a1、b1、c1),每個子資料夾下有好幾張jpg圖片,要求寫一段程式碼(用PythonorShell),把這些圖片全部拷貝並存在B資料夾下。

一小撮測試工程師的討論

聰明的Cookie同學:考點就是如何遍歷一個資料夾下的檔案,需要考慮的是檔案路徑深度,需要用到遞迴。
誠實的黑山老妖同學:我覺得對我來說,難點是操作檔案的方法,之前沒怎麼用過,遞迴遍歷啥的倒是小問題。
經驗老道的剪燭同學:如果拿這個題目面試測試工程師,這個肯定還需要你提問的(考你需求分析),不僅僅是說寫個指令碼,等你寫完了(考你程式設計熟悉),還會讓你針對你寫的程式碼進行測試(考你用例設計),都是套路。

爆炸的hellohell同學:我再想,如果我碰到這個問題,是否能當場給出正確答案?估計不成,因為API全忘掉了。確實記性不好。如果給我個本兒,給上網機會,多費點時間,能搞出來;甚至用了遞迴,生成器,精簡了程式碼(篡成一行),做了判斷。
jpg是個目錄咋辦?不同目錄下檔案同名咋辦?以及其他
但前提是你不參考任何東西就寫程式碼。但實際工作中好像這種人不多;so,我只能原地爆炸了。不過打心裡還是覺得用Shell解決這個問題比較好些。

參考答案

Python解答(by煎餅果子)

 # -*- 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() 

Java解答(byLucas)

 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解答(by傑)

 find  ./A/ -maxdepth 2  -name '*.jpg' -exec cp {} ./B \; 

P.S.以上答案僅供參考,歡迎大家在留言區,回覆你的精彩解答,也許有驚喜哦。(end)### ⬇️ 點選“下方連結”,提升測試核心競爭力!
>>更多技術文章分享和免費資料領取