文件讀寫html
A 讀取文件python
讀文件三步:開——讀——關。
file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8')
第一個參數是文件的保存地址
第二個參數表示打開文件時的模式(r(讀),w(寫入),a(追加))
第三個參數encoding='utf-8',表示的是返回的數據採用何種編碼,通常採用utf-8或者gbk
——————————————————————————————
mac
open('/Users/Ted/Desktop/test/abc.txt'') #絕對路徑
open('abc.txt') #相對路徑
#相對路徑也能夠寫成open('./abc.txt')windows
windows
Windows系統裏,經常使用\來表示絕對路徑, /來表示相對路徑
C:\Users\Ted\Desktop\test\abc.txt #\在Python中是轉義字符,Windows的絕對路徑一般要稍做處理
寫成如下兩種格式app
open('C:\\Users\\Ted\\Desktop\\test\\abc.txt')
#將'\'替換成'\\'函數
open(r'C:\Users\Ted\Desktop\test\abc.txt')
#在路徑前加上字母
——————————————————————————————
獲取文件路徑方法
用VS Code打開文件夾,在文件點擊右鍵
或者
將文件拖入終端窗口,得到文件的絕對路徑
——————————————————————————————
B 寫入文件測試
【第1步-開】以寫入的模式打開文件。
file1 = open('/Users/Ted/Desktop/test/abc.txt','w',encoding='utf-8') 編碼
【第2步-寫】往文件中寫入內容,使用write()函數。
file1.write('張無忌\n') spa
#file1 = open('/Users/Ted/Desktop/test/abc.txt', 'a',encoding='utf-8')
#以追加的方式打開文件abc.txt
file1.write('張無忌\n')
#把字符串'張無忌'寫入文件file1excel
【第3步-關】仍是要記得關閉文件,使用close()函數
file1.close() code
#注意事項:
1.write()函數寫入文本文件的也是字符串類型。
2.在'w'和'a'模式下,若是你打開的文件不存在,那麼open()函數會自動幫你建立一個
————————————————————————————————————————
爲了不打開文件後忘記關閉,佔用資源或
當不能肯定關閉文件的恰當時機的時候,咱們能夠用到關鍵字with
# 普通寫法
1 file1 = open('abc.txt','a') 2 file1.write('張無忌') 3 file1.close()
# 使用with關鍵字的寫法
1 with open('abc.txt','a') as file1: 2 #with open('文件地址','讀寫模式') as 變量名: 3 #格式:冒號不能丟 4 file1.write('張無忌') 5 #格式:對文件的操做要縮進 6 #格式:無需用close()關閉
—————————————————————————————————————————
scores.txt
羅恩 23 35 44
哈利 60 77 68 88 90
赫敏 97 99 89 91 95 90
馬爾福 100 85 90
1 file = open('./scores.txt','r',encoding='utf-8') 2 file_lines = file.readlines() #函數readlines(),「按行讀取」 3 file.close() 4 5 final_scores = [] 6 7 for i in file_lines: 8 data =i.split() #split()把字符串分開,把字符串切分紅更細的一個個的字符串 9 sum = 0 10 for score in data[1:]: #遍歷列表中第1個數據和以後的數據 11 sum = sum + int(score) #而後依次加起來,但分數是字符串,因此要轉換 12 result = data[0]+str(sum)+'\n' #結果就是學生姓名和總分 13 final_scores.append(result) #每統計一個學生的總分,就把姓名和總分寫入空列表 14 15 winner = open('./winner.txt','w',encoding='utf-8') 16 winner.writelines(final_scores) #writelines()函數,此處final_scores是一個列表,write()的參數必須是一個字符串,而writelines()能夠是序列 17 winner.close()
——————————————————————
擴展
join()函數,字符串合併
語法:str.join(sequence)
str表明在這些字符串之中,你要用什麼字符串鏈接
sequence表明數據序列
1 a=['c','a','t'] 2 b='' 3 print(b.join(a)) 4 c='-' 5 print(c.join(a))
6 cat 7 c-a-t
######################################################
# 下面註釋掉的代碼,皆爲檢驗代碼(驗證每一步的思路和代碼是否達到目標,可解除註釋後運行)。
1 file1 = open('winner.txt','r',encoding='utf-8') 2 file_lines = file1.readlines() 3 file1.close() 4 5 dict_scores = {} 6 list_scores = [] 7 final_scores = [] 8 9 # print(file_lines) 10 # print(len('\n')) 11 12 # 打印結果爲:['羅恩102\n', '哈利383\n', '赫敏570\n', '馬爾福275\n'] 13 # 通過測試,發現'\n'的長度是1。因此,名字是「第0位-倒數第5位」,分數是「倒數第4位-倒數第二位」。 14 # 再根據「左取右不取」,可知:name-[:-4],score-[-4:-1] 15 16 for i in file_lines: # i是字符串。 17 print(i) 18 name = i[:-4] # 取出名字(注:字符串和列表同樣,是經過偏移量來獲取內部數據。) 19 score = int(i[-4:-1]) # 取出成績 20 print(name) 21 print(score) 22 dict_scores[score] = name # 將名字和成績對應存爲字典的鍵值對(注意:這裏的成績是鍵) 23 list_scores.append(score) 24 25 # print(list_scores) 26 list_scores.sort(reverse=True) # reverse,逆行,因此這時列表降序排列,分數從高到低。 27 # print(list_scores) 28 29 for i in list_scores: 30 result = dict_scores[i] + str(i) + '\n' 31 # print(result) 32 final_scores.append(result) 33 34 print(final_scores) # 最終結果 35 36 winner_new = open('winner_new.txt','w',encoding='utf-8') 37 winner_new.writelines(final_scores) 38 winner_new.close()
錦瑟
[唐] 李商隱
錦瑟無故五十弦,
一弦一柱思華年。
莊生曉夢迷蝴蝶,
望帝春心託杜鵑。
滄海月明珠有淚,
藍田日暖玉生煙。
此情可待成追憶,
只是當時已惘然。
1 list_test = ['一弦一柱思華年。\n','只是當時已惘然。\n'] # 將要默寫的詩句放在列表裏。 2 3 with open ('poem2.txt','r',encoding='utf-8') as f: 4 lines = f.readlines() 5 print(lines) #顯示完整的詩 6 with open('poem2.txt','w',encoding='utf-8') as new: 7 for line in lines: 8 if line in list_test: # 屬於默寫列表中的句子,將其替換成橫線。 9 new.write('____________。\n') 10 else: 11 new.write(line)
########################################################################
csv是一種文件格式,你能夠把它理解成「簡易版excel」
若是要手動新建csv文件,咱們能夠先新建一個excel表格,而後選擇另存爲「csv」格式便可
一張csv格式的表格,咱們也能夠選擇另存爲「excel」格式
用csv模塊讀寫csv文件
英文教程:https://docs.python.org/3.6/library/csv.html
中文教程:https://yiyibooks.cn/xx/python_352/library/csv.html#module-csv
先看案例
##########################################################################
csv文件內容:
1 import csv 2
3 with open("test.csv",newline = '') as f: 4 reader = csv.reader(f) 5 #使用csv的reader()方法,建立一個reader對象
6 for row in reader: 7 #遍歷reader對象的每一行
8 print(row)
#####################################################################
往csv格式文件寫入數據
csv文件內容:
追加寫入兩行列表
1 import csv 2 with open('test.csv','a', newline='',encoding='utf-8') as f: 3 writer = csv.writer(f) 4 writer.writerow(['4', '貓砂', '25', '1022', '886']) 5 writer.writerow(['5', '貓罐頭', '18', '2234', '3121'])
writerow()和writerows的區別
(1)writerow() 括號內的內容爲列表;
(2)writerows() 括號內的內容爲元組,且元組內的元素由兩個以上的列表組成。