假如你是一位地理老師, 班上有 35 名學(xué)生, 你希望進(jìn)行美國(guó)各州首府的一個(gè)小測(cè)驗(yàn)。不妙的是,班里有幾個(gè)壞蛋, 你無(wú)法確信學(xué)生不會(huì)作弊。你希望隨機(jī)調(diào)整問(wèn)題的次序, 這樣每份試卷都是獨(dú)一無(wú)二的, 這讓任何人都不能從其他人那里抄襲答案。當(dāng)然,手工完成這件事又費(fèi)時(shí)又無(wú)聊。
下面是程序所做的事:
• 創(chuàng)建 35 份不同的測(cè)驗(yàn)試卷。
• 為每份試卷創(chuàng)建 50 個(gè)多重選擇題,次序隨機(jī)。
• 為每個(gè)問(wèn)題提供一個(gè)正確答案和 3 個(gè)隨機(jī)的錯(cuò)誤答案,次序隨機(jī)。
• 將測(cè)驗(yàn)試卷寫(xiě)到 35 個(gè)文本文件中。
• 將答案寫(xiě)到 35 個(gè)文本文件中。
這意味著代碼需要做下面的事:
• 將州和它們的首府保存在一個(gè)字典中。
• 針對(duì)測(cè)驗(yàn)文本文件和答案文本文件,調(diào)用 open()、 write()和 close()。
• 利用 random.shuffle()隨機(jī)調(diào)整問(wèn)題和多重選項(xiàng)的次序。
代碼:
import random #問(wèn)題的數(shù)據(jù)保存在字典中,詩(shī)歌名稱(chēng)作為鍵,作者作為值。 poems={'1+3':'4', '6+7':'13', '9*3':'27', '40-1':'39', '38-13':'25' } #我們可以用上面的字典隨機(jī)的出5份試卷 for num in range(5): #創(chuàng)建試卷和答案文本文件 testFile = open('poem_test%s.txt' % (num + 1),'w') answerFile = open('poem_answer%s.txt' % (num + 1),'w') #創(chuàng)建試卷的頭部格式 testFile.write('姓名:\n\n日期:\n\n年級(jí):\n\n') testFile.write('試卷號(hào):%s' %(num + 1)) testFile.write('\n\n\n') #隨機(jī)獲取詩(shī)歌名稱(chēng) names = list(poems.keys()) random.shuffle(names) #創(chuàng)建答案選項(xiàng),這個(gè)for循環(huán)是要包含在上面一個(gè)for循環(huán)中的,因?yàn)榕秱冃枰獮槊恳粋€(gè)文件創(chuàng)建選項(xiàng)。 for questionNum in range(10): #試卷的正確的選項(xiàng),就是names列表中的值在字典中對(duì)應(yīng)的作者 correctAnswer = poems[names[questionNum]] #試卷的錯(cuò)誤的選項(xiàng),就是字典中所有的值 #然后在每次循環(huán)過(guò)程中去掉其中的正確的那一項(xiàng), wrongAnswers = list(poems.values()) del wrongAnswers[wrongAnswers.index(correctAnswer)] #隨機(jī)選擇三個(gè)錯(cuò)誤的答案 #random中sample(seq, n)函數(shù):從序列seq中選擇n個(gè)隨機(jī)且獨(dú)立的元素; wrongAnswers = random.sample(wrongAnswers,3) #問(wèn)題單包含的四個(gè)選項(xiàng) answerOptions = wrongAnswers + [correctAnswer] #打亂答案順序 random.shuffle(answerOptions) #第四步:將內(nèi)容寫(xiě)入測(cè)驗(yàn)試卷和答案文件 #將問(wèn)題和答案寫(xiě)入文件中,\表示一行代碼寫(xiě)不下可以換多行 testFile.write('%s,%s的答案是:\n' % \ (questionNum + 1,names[questionNum])) for i in range(4): testFile.write('%s. %s\n'%('ABCD'[i],answerOptions[i])) testFile.write('\n') #寫(xiě)入答案 answerFile.write('%s.%s\n' % (questionNum + 1,'ABCD'\ [answerOptions.index(correctAnswer)])) testFile.close() answerFile.close()
本節(jié)將介紹如何用程序組織硬盤(pán)上已經(jīng)存在的文件。不知你是否經(jīng)歷過(guò)查找一個(gè)文件夾,里面有幾十個(gè)、幾百個(gè)、甚至上千個(gè)文件,需要手工進(jìn)行復(fù)制、改名、移動(dòng)或壓縮。比如下列這樣的任務(wù):
• 在一個(gè)文件夾及其所有子文件夾中,復(fù)制所有的 pdf 文件(且只復(fù)制 pdf 文件)
• 針對(duì)一個(gè)文件夾中的所有文件,刪除文件名中前導(dǎo)的零,該文件夾中有數(shù)百個(gè)文件,名為 spam001.txt、 spam002.txt、 spam003.txt 等。
• 將幾個(gè)文件夾的內(nèi)容壓縮到一個(gè) ZIP 文件中(這可能是一個(gè)簡(jiǎn)單的備份系統(tǒng))
所有這種無(wú)聊的任務(wù),正是在請(qǐng)求用 Python 實(shí)現(xiàn)自動(dòng)化。通過(guò)對(duì)電腦編程來(lái)完成這些任務(wù),你就把它變成了一個(gè)快速工作的文件職員,而且從不犯錯(cuò)。
#python創(chuàng)建并寫(xiě)入新文件, #python統(tǒng)計(jì)特定文件夾下的word和pdf的數(shù)量 import glob,os # path就是你說(shuō)的特定文件夾 path = r"D:\linshi" # 這里的pdf可以換成docx file=glob.glob(os.path.join(path, "*.pdf")) count = 0 for i in file: count = count + 1 print(count) #復(fù)制文件的完整路徑借助python對(duì)該文件夾的文件批量復(fù)制到另一個(gè)指定文件夾中。有兩種模式,一種只復(fù)制文件。第二種復(fù)制文件的完整路徑 import os import shutil def get_all_file_by_type(path, type=()): # 獲得以type類(lèi)型結(jié)尾的所有文件,返回一個(gè)list filelist = [] for a, b, c in os.walk(path): for name in c: fname = os.path.join(a, name) if fname.endswith(type): filelist.append(fname) return filelist def get_all_file_by_string(path, string_list): filelist = [] for a, b, c in os.walk(path): for name in c: fname = os.path.join(a, name) for string in string_list: # 遍歷string_list,如果文件路徑中包含string,那么append進(jìn)filelist if string in fname: # 如果只想要文件名符合條件,把fname換成name即可 filelist.append(fname) break return filelist def copy_file_by_type(old_path, new_path, type=('doc', 'docx'), requird_dir=False): try: file_list = get_all_file_by_type(old_path, type=type) # 獲得該路徑下所有的type類(lèi)型文件 if not os.path.exists(new_path): # 創(chuàng)建新的文件夾 os.makedirs(new_path) if not requird_dir: # 如果僅復(fù)制文件 for file in file_list: name = file.split("\\")[-1] # 獲得文件名字 new_paths = os.path.join(new_path, name) # 與新路徑拼接,獲得完整的新路徑 shutil.copy(file, new_paths) print(new_paths + "成功") if requird_dir: for file in file_list: name = file.split("\\")[-1] # 獲得文件名字 new_paths = file.replace(old_path, new_path) # 將一個(gè)完整路徑中,開(kāi)始的路徑替換成新的路徑 dir = new_paths.split(name)[0] # 獲得文件夾路徑 if not os.path.exists(dir): # 創(chuàng)建新文件夾 os.makedirs(dir) shutil.copy(file, new_paths) print(new_paths + "成功") except Exception as e: print(e) def copy_file_by_string(old_path, new_path, string_list, requird_dir=False): try: file_list = get_all_file_by_string(old_path, string_list=string_list) # 與上述一樣,只不過(guò)這里調(diào)用的是get_all_file_by_string方法 if not os.path.exists(new_path): os.makedirs(new_path) if not requird_dir: for file in file_list: name = file.split("\\")[-1] new_paths = os.path.join(new_path, name) shutil.copy(file, new_paths) print(new_paths + "成功") if requird_dir: for file in file_list: name = file.split("\\")[-1] new_paths = file.replace(old_path, new_path) print(new_paths) dir = new_paths.split(name)[0] if not os.path.exists(dir): os.makedirs(dir) shutil.copy(file, new_paths) print(new_paths + "成功") except Exception as e: print(e) if __name__ == '__main__': old_path = r"F:\aaaa" new_path = r"F:\bbbb" list = ["面試", "筆試", "題庫(kù)", "題目"] copy_file_by_string(old_path=old_path, new_path=new_path, string_list=list, requird_dir=False) # type = ('docx','doc',"pdf","md") # copy_file_by_type(old_path=old_path, new_path=new_path, type=type, requird_dir=True) #python壓縮多個(gè)文件到zip格式-zipfile包實(shí)例 pip install zipfile file=r'D:\test.zip' out_path=r'D:\files' #遍歷files文件夾下的文件,壓縮發(fā)送 zip_1=zipfile.ZipFile(file,'w') for f in os.listdir(out_path): zip_1.write(os.path.join(out_path,f),f,zipfile.ZIP_DEFLATED) zip_1.close() #python批量刪除文件名_Python批量修改文件名 import os, re while True: keyword = input("請(qǐng)輸入你要?jiǎng)h除的字符串:") if len(keyword)==0 or keyword.isspace(): print("字符串不能為空!") else: break suffix = input("需要篩選的文件名后綴(Enter代表所有):") fileNames = os.listdir() #獲取當(dāng)前目錄下的所有文件 for file in fileNames: check = os.path.join(os.path.abspath('.'),file) if os.path.isfile(check): if len(suffix)==0 or suffix.isspace(): if keyword in file: print(file," -> ",file.replace(keyword,'')) os.rename(file,file.replace(keyword,'')) else: #用正則表達(dá)式匹配后綴名 if re.match('.+?\.'+suffix+'$',file) != None and keyword in file: print(file," -> ",file.replace(keyword,'')) os.rename(file,file.replace(keyword,''))
1)、編寫(xiě)一個(gè)程序,遍歷一個(gè)目錄樹(shù),查找特定擴(kuò)展名的文件(諸如.pdf 或.jpg)。不論這些文件的位置在哪里, 將它們拷貝到一個(gè)新的文件夾中。
2) 、一些不需要的、 巨大的文件或文件夾占據(jù)了硬盤(pán)的空間, 這并不少見(jiàn)。如果你試圖釋放計(jì)算機(jī)上的空間, 那么刪除不想要的巨大文件效果最好。但首先你必須找到它們。編寫(xiě)一個(gè)程序, 遍歷一個(gè)目錄樹(shù), 查找特別大的文件或文件夾, 比方說(shuō), 超過(guò)100MB 的文件(回憶一下,要獲得文件的大小,可以使用 os 模塊的 os.path.getsize()
)。將這些文件的絕對(duì)路徑打印到屏幕上。
3)、編寫(xiě)一個(gè)程序, 在一個(gè)文件夾中, 找到所有帶指定前綴的文件, 諸如 spam001.txt,spam002.txt 等,并定位缺失的編號(hào)(例如存在 spam001.txt 和 spam003.txt, 但不存在 spam002.txt)。讓該程序?qū)λ泻竺娴奈募拿?消除缺失的編號(hào)。作為附加的挑戰(zhàn),編寫(xiě)另一個(gè)程序,在一些連續(xù)編號(hào)的文件中,空出一些編號(hào),以便加入新的文件。
到此這篇關(guān)于詳解Python自動(dòng)化之文件自動(dòng)化處理的文章就介紹到這了,更多相關(guān)Python文件自動(dòng)化處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:安慶 吉林 長(zhǎng)春 怒江 洛陽(yáng) 岳陽(yáng) 清遠(yuǎn) 泉州
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Python自動(dòng)化之文件自動(dòng)化處理》,本文關(guān)鍵詞 詳解,Python,自動(dòng)化,之,文件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。