python學習之讀寫文件

  1. windows上的斜槓
    os.path.join()—將多個字符串連接,注意使用斜槓\(若在OS X上是\)
#-*-coding:utf-8 -*-
import os
print(os.path.join("AA","BB","CC"))
>>>>AA\BB\CC
  1. 當前工作目錄
#-*-coding:utf-8 -*-
import os
print(os.getcwd())#獲取此文件的目錄,返回當前目錄
>>>E:\ticke_grabbing\re_wri_file
  1. 絕對路徑和相對路徑
    絕對路徑:總是從根文件夾開始的。
    相對路徑:相對於程序的工作目錄
    .代表當前目錄
    …代表父文件夾
  2. 創建新文件夾
print(os.makedirs("Test"))#這個是創建文件夾,若存在則返回報錯,若不存在創建後 返回None
  1. 處理絕對路徑和相對路徑
    os.path模塊提供了一些函數,返回一個相對路徑的絕對路徑
#-*-coding:utf-8 -*-
import os
# print(os.getcwd())#獲取此文件的目錄,返回當前目錄
# print(os.makedirs("Test"))#這個是創建文件夾,若存在則返回報錯,若不存在創建後 返回None
url=os.path.abspath('.')#返回當前路徑的“絕對路徑”
print(url)
url=os.path.isabs('.')#如果參數是絕對路徑返回True,若是相對路徑返回False
print(url)
url=os.path.relpath('.','E:\\wampserver\\_')#relpath(path,start)---返回start到path到所有字符串路徑 ,最好在同一個根目錄下使用-
print(url)
url=os.path.dirname("E:\\wampserver\\wampserver\\1.txt") #獲取最後文件或文件夾上次所有目錄字符串
print(url)
url=os.path.basename("E:\\wampserver\\wampserver\\1.txt") #獲取最後文件或文件夾的名稱
print(url)
url=os.path.split("E:\\wampserver\\wampserver\\1.txt")#將最後一個文件夾或文件和上層目錄分離,返回元組
print(url)

  1. 查看文件大小和文件夾內容
size=os.path.getsize(r"E:\wampserver\_\wampserver")#若地址到最底部則返回文件大小,若到目錄則返回目錄中所有文件大小
print(size)
file=os.listdir(r"E:\wampserver\_\wampserver")#返回文件夾下所有文件的名稱,返回類型爲字符串列表,一般這個函數和os.path.join一起用
print(file)
>>>>>['1.txt', 'wampserver3.0.6_x86_apache2.4.23_mysql5.7.14_php5.6.25-7.0.10.exe']
  1. 檢查路徑的有效性
print(os.path.exists(r"E:\wampserver\_\wampserver"))#path參數所指的文件或文件夾是否存在
print(os.path.isdir(r"E:\wampserver\_\wampserver"))##path參數存在,是否是一個文件夾
print(os.path.isfile(r"E:\wampserver\_\wampserver"))##path參數存在,目錄下文件是否存在
  1. 文件讀寫過程
    讀取文件分爲三步:
    1.調用oepn()函數,返回一個File對象
    2.調用File對象的read()或write()方法
    3.調用File對象的close()方法,關閉該文件
    用open函數打開一個文件,oepn(“打開文件的地址”,什麼方式打開)
    a—追加
    b—二進制
    r—讀的方式
    w—寫的方式
    讀取文件有read()和readline()方法:readline方法讀文件中每一行,返回字符串
    寫入:
    write(“xxx”)
  2. 用shelve模塊保存變量
shelFile=shelve.open("mydata")#將變量保存到二進制的shelf文件中,運行後會產生三個文件  .bak  .dat .dir 
cats=['1','2','3']
shelFile["cats"]=cats
print(shelFile['cats'])
print(list(shelFile.keys()))#將文件中所有鍵值大於出來
print(list(shelFile.values()))#將文件中所有value值打印出來
#shelve存儲和字典相似{'key':'value'}
shelFile.close()
  1. 小練習:
#-*-coding:utf-8 -*-
'''
randomQuiz.py
1.創建35份不同的測試試卷
2.爲每份試卷創建50個選擇題。次序隨機
3.爲每個問題提供一個正確答案,三個隨機錯誤答案
4.將測試試卷寫到35個文本文件中
5.將答案寫到35個文件中
'''
'''
capitals={'0': '0', '1': '1', '2': '2', '3': '3', '4': '4', '5': '5', '6': '6', '7': '7', '8': '8', '9': '9', '10': '10', '11': '11', '12': '12', '13': '13', '14': '14', '15': '15', '16': '16', '17': '17', '18': '18', '19': '19', '20': '20', '21': '21', '22': '22', '23': '23', '24': '24', '25': '25', '26': '26', '27': '27', '28': '28', '29': '29', '30': '30', '31': '31', '32': '32', '33': '33', '34': '34', '35': '35', '36': '36', '37': '37', '38': '38', '39': '39', '40': '40', '41': '41', '42': '42', '43': '43', '44': '44', '45': '45', '46': '46', '47': '47', '48': '48', '49': '49'}
'''
import random
import os 
capitals={}
for i in range(50):#爲方便用循環添加到字典中
	capitals[str(i)]=str(i)
for  i in range(50):#c創建文件 打亂問題次序
	filename_q="quiz"+str(i)+".txt"#定義試卷的名稱 
	file_q=open(filename_q,"w")
	file_q.write("Name:     \n")
	file_q.write("\n\n")
	filename_A="Answer"+str(i)+".txt"#定義答案試卷的名稱
	file_A=open(filename_A,"w")
	state=list(capitals.keys())#將所有key選項打亂
	random.shuffle(state)#將題隨機排序
	for x in range(50):
		correctAnswer=capitals[state[x]]#獲取打亂列表中的值 作爲字典的鍵傳入
		wrongAnser=list(capitals.values())#將每個values 轉爲列表
		del wrongAnser[wrongAnser.index(correctAnswer)]#刪除正確答案  list的 index是獲取值在列表中的位置
		wrongAnser=random.sample(wrongAnser,3)#在49個字符串列表中隨機拿去3個字符串,不改變原來結構或值
		file_q.write("%s.witch%s:thissss answer ok?\n"%(str(x),state[x]))#將題隨機出來
		answerOptions=[correctAnswer]+wrongAnser #正確答案和錯誤答案
		random.shuffle(answerOptions)#將答案隨機
		for y in  range(4):
			file_q.write("%s :%s \n"%("ABCD"[y],answerOptions[y]))
		file_A.write(str(x)+":"+"correct answer:%s \n"%("ABCD"[answerOptions.index(correctAnswer)]))
	file_q.close()
	file_A.close()
#-*-coding:utf-8 -*-
'''
本次是 實現多重剪切板
1.如果輸入save 那麼將剪切板保存到關鍵字
2.若輸入list 那麼將給所有關鍵字列出來
3.輸入關鍵字則將關鍵字對應的文本 輸入到剪切板上
運用到庫:
pyperclip
shelve---主要是利用key:values特性
'''
import pyperclip
import shelve
def mc_Bord(key_name=None,spam=None):
	if key_name=="save":
		clip=pyperclip.paste()#獲取剪切版字符串
		if spam==None:#如果用戶未傳入關鍵字
			return "請輸入關鍵字"
		else:
			sh=shelve.open("save")
			sh[spam]=clip
			print(sh[spam])
			sh.close()
			# print([key_name])
			return "儲存成功"
	elif key_name=="list":
		sh=shelve.open("save")
		print(list(sh.keys()))
		sh.close()
		pass
	elif key_name==None:
		sh=shelve.open("save")
		pyperclip.copy(sh[spam])
		sh.close()
	elif key_name=="delete":
		sh=shelve.open("save")
		del sh[spam]
		sh.close()
print(mc_Bord("delete","s"))

#-*-coding:utf-8 -*-
'''
Madlib.py
1.用戶讀取一個文本文件,替換他們所需要的文件後,再保存。
尋找到yyyyy替換爲xxxx
'''
import re
import os
def rele(url,dest_str,repale_str):#dest_str尋找的參數  repale_str要替換的參數
	if dest_str=="" or repale_str=="":
		return "請輸入參數"
	else:
		regex=re.compile(dest_str+"*")
		file=open(url)
		txt=file.read()
		sub=regex.sub(repale_str,txt)
		file.close()
		file=open(url,'w')
		# print(sub)
		file.write(sub)
		file.close()
rele("T1.txt","yyyyy","xxx")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章