程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

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

編輯:Python

本文是測試開發工程師Venn同學面試某互聯網名企遇到的一道面試題目,首發於Testerhome社區,引發了有趣的討論和解答,供各位技術友參考。

面試京東金融被問到的有趣測試題

題目:在A文件夾下有多個子文件夾(a1、b1、c1),每個子文件夾下有好幾張jpg圖片,要求寫一段代碼(用Python or Shell),把這些圖片全部拷貝並存在B文件夾下。

一小撮測試工程師的討論

聰明的Cookie同學:考點就是如何遍歷一個文件夾下的文件,需要考慮的是文件路徑深度,需要用到遞歸。

誠實的黑山老妖同學:我覺得對我來說,難點是操作文件的方法,之前沒怎麼用過,遞歸遍歷啥的倒是小問題。

經驗老道的剪燭同學:如果拿這個題目面試測試工程師,這個肯定還需要你提問的(考你需求分析),不僅僅是說寫個腳本,等你寫完了(考你編程熟悉),還會讓你針對你寫的代碼進行測試(考你用例設計),都是套路。

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

參考答案

Python解答

# -*- 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解答

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 \;

加入我們

進群交流、獲取更多干貨, 請關注微信公眾號:


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved