# 1,有以下文件,a1.txt,裏面的內容爲: # # 老男孩是最好的培訓機構, # 全心全意爲學生服務, # 只爲學生將來,不爲牟利。 # 我說的都是真的。哈哈 # # 分別完成如下的功能: # a,將原文件所有讀出來並打印。 f = open('a1.txt', mode='r', encoding='utf-8') print(f.read()) f.close() # b,在原文件後面追加一行內容:信不信由你,反正我信了。 f = open('a1.txt', mode='a', encoding='utf-8') f.write('\n信不信由你,反正我信了。') f.flush() f.close() # c,將原文件所有讀出來,並在後面添加一行內容:信不信由你,反正我信了。 f = open('a1.txt', mode='r+', encoding='utf-8') print(f.read()) f.write('\n信不信由你,反正我信了。') f.flush() f.close() # d,將原文件所有清空,換成下面的內容: # # 天天堅持一點, # 天天努力一點, # 天天多思考一點, # 慢慢你會發現, # 你的進步愈來愈大。 f = open('a1.txt', mode='w', encoding='utf-8') # 注意三引號裏面的內容第一行不要換行到下一行,不然文件裏面會顯示一行空行 content = """天天堅持一點, 天天努力一點, 天天多思考一點, 慢慢你會發現, 你的進步愈來愈大 """ f.write(content) f.flush() f.close() # e,將原文件內容所有讀取出來,並在‘我說的都是真的。哈哈’這一行的前面加一行,‘大家就信吧~’而後將更改以後的新內容,寫入到一個新文件:a1.txt。 import os # 方法一:使用+拼接字符串 with open("a1.txt", mode="r", encoding="utf-8") as f, \ open("a1_副本.txt", mode="w", encoding="utf-8") as f2: for line in f: # 1.遍歷文件 line = line.strip() # 這個要去空格,讀取出來的每一行的內容裏面是不會包含換行符\n的,只會在控制檯打印的時候直接間隔一個空行 if line == '我說的都是真的。哈哈': # 若是line 沒有去空格的話,也不會有讀出來的某一行等於'我說的都是真的。哈哈\n' # line = '大家就信吧~\n'.join([line]) # join是沒辦法使用的,join是迭代拼接,不是簡單的拼接 line = '大家就信吧~\n' + line # 2.拿到修改好的內容 print(line) f2.write(line+'\n') # 3. 把修改好的內容寫入一個新文件 # 4.刪除原來文件 os.remove("a1.txt") # 5.重命名副本爲原來的文件名 os.rename("a1_副本.txt", "a1.txt") # 方法二:使用replace替換 # 就不用判斷讀到哪一行了,由於replace自身有個尋找的功能,符合第一個參數才替換,不符合不替換 with open("a1.txt", mode="r+", encoding="utf-8") as r,\ open("a1_1.txt", mode="w", encoding="utf-8")as r1: for line in r: r1.write(line.replace("我說的都是真的。哈哈", "大家就信吧~\n我說的都是真的。哈哈")) os.remove("a1.txt") os.rename("a1_1.txt", "a1.txt") # 方法三:老師講解的 with open("a1.txt", mode="r+", encoding="utf-8") as f1,\ open("a1_1.txt", mode="w", encoding="utf-8")as f2: for line in f1: if line.strip() == '我說的都是真的。哈哈': # 讀到這一行以前先寫入一行你須要的內容到f2文件中 f2.write("大家就信吧~\n") f2.write(line) os.remove("a1.txt") os.rename("a1_1.txt", "a1.txt") # 2,有以下文件,t1.txt,裏面的內容爲: # # 葫蘆娃,葫蘆娃, # 一根藤上七個瓜 # 風吹雨打,都不怕, # 啦啦啦啦。 # 我能夠算命,並且算的特別準: # 上面的內容你確定是內心默唱出來的,對不對?哈哈 # # 分別完成下面的功能: # a,以r+的模式打開原文件,判斷原文件是否可讀,是否可寫。 # 以前不知道的 with open('t1.txt', mode='r+', encoding='utf-8') as f: print(f.readable()) print(f.writable()) """ # 以a的模式打開文件是沒辦法經過seek移動光標的,只能追加到文件的末尾 with open('t1.txt', mode='a', encoding='utf-8') as f: f.seek(0) f.write('456789\n') # 這裏的內容仍是追加到文件的末尾的 """ # b,以r的模式打開原文件,利用for循環遍歷文件句柄。 with open('t1.txt', mode='r', encoding='utf-8') as f: for line in f: print(line) # c,以r的模式打開原文件,以readlines()方法讀取出來,並循環遍歷 readlines(),並分析b,與c 有什麼區別?深刻理解文件句柄與 readlines()結果的區別。 with open('t1.txt', mode='r', encoding='utf-8') as f: # print(f.readlines()) for line in f.readlines(): print(line) # d,以r模式讀取‘葫蘆娃’前三個字符。 with open('t1.txt', mode='r', encoding='utf-8') as f: print(f.read(3)) # e,以r模式讀取第一行內容,並去除此行先後的空格,製表符,換行符。 with open('t1.txt', mode='r', encoding='utf-8') as f: print(f.readline().strip()) # f,以r模式打開文件,從‘風吹雨打.....’開始讀取,一直讀到最後。 with open('t1.txt', mode='r', encoding='utf-8') as f: for line in f.readlines()[2:]: print(line.strip()) # 老師講解的 with open('t1.txt', mode='r', encoding='utf-8') as f: f.readline() # 前兩行讀取可是不打印 f.readline() print(f.read()) # g,以a+模式打開文件,先追加一行:‘老男孩教育’而後在從最開始將 原內容所有讀取出來。 with open('t1.txt', mode='a+', encoding='utf-8') as f: f.write('\n老男孩教育') f.seek(0) print(f.read()) # h,截斷原文件,留下內容:‘葫蘆娃’ with open('t1.txt', mode='r+', encoding='utf-8') as f: f.truncate(9) print(f.read()) # 3,文件a.txt內容:每一行內容分別爲商品名字,價錢,個數。 # # apple 10 3 # tesla 100000 1 # mac 3000 2 # lenovo 30000 3 # chicken 10 3 # # 經過代碼,將其構建成這種數據類型:[{'name':'apple','price':10,'amount':3},{'name':'tesla','price':1000000,'amount':1}......] 並計算出總價錢。 #我寫的 lst = [] sum = 0 with open('a3.txt', mode='r', encoding='utf-8') as f: for line in f: dic = {} a, b, c = line.strip().split() # split()括號內不傳入參數,默認以一切的空白做爲切割符 sum += int(b) * int(c) dic['name'] = a dic['price'] = b dic['amount'] = c lst.append(dic) print(lst, sum) #老師寫的 lst = [] sum = 0 with open('a3.txt', mode='r', encoding='utf-8') as f: for line in f: a, b, c = line.strip().split() # split()括號內不傳入參數,默認就是以空白(一切相連的空白當成一個總體去)做爲切割符 sum += int(b) * int(c) dic = {'name':a, 'price':int(b), 'amout':int(c)} lst.append(dic) print(lst, sum) # # 4,有以下文件: # # alex是老男孩python發起人,建立人。 # alex實際上是人妖。 # 誰說alex是sb? # 大家真逗,alex再牛逼,也掩飾不住資深屌絲的氣質。 # # 將文件中全部的alex都替換成大寫的SB(文件的改的操做)。 # import os with open("alex.txt", mode="r", encoding="utf-8")as f,\ open("alex_1.txt", mode="w", encoding="utf-8")as f1: for line in f: if "alex" in line: line = line.replace("alex", "SB") f1.write(line) os.remove("alex.txt") os.rename("alex_1.txt", "alex.txt") # 5,文件a1.txt內容(升級題) # # name:apple price:10 amount:3 year:2012 # name:tesla price:100000 amount:1 year:2013 # ....... # # 經過代碼,將其構建成這種數據類型: # [{'name':'apple','price':10,'amount':3}, # {'name':'tesla','price':1000000,'amount':1}......] # 並計算出總價錢。 lst = [] sum = 0 with open('a5.txt', mode='r', encoding='utf-8') as f: for line in f: dic = {} for el in line.strip().split(): # 獲得每一行切割成的列表 k, v = el.split(':') # 獲得每一行切割成的列表 中的每一個元素切割成的列表的解包 if k != 'year': if v.isdigit(): dic[k] = int(v) else: dic[k] = v lst.append(dic) sum += dic['price'] * dic['amount'] print(lst) print(sum) # # # 6,文件a1.txt內容(升級題) # # 序號 部門 人數 平均年齡 備註 # 1 python 30 26 單身狗 # 2 Linux 26 30 沒對象 # 3 運營部 20 24 女生多 # ....... # # 經過代碼,將其構建成這種數據類型: # [{'序號':'1','部門':Python,'人數':30,'平均年齡':26,'備註':'單身狗'}, # ......] #不知道split()不傳入參數的用法寫的 lst = [] title = [] with open('a6.txt', mode='r', encoding='utf-8') as f: title_ = f.readline().strip().split(' ') # 字典的key的列表 for el in title_: if len(el) != 0: title.append(el) # print(title) for line in f: # 接着上面的readline讀,因此是從第一行的結尾接着遍歷文件 dic = {} # 每一行都須要一個空字典去裝該行的數據 data = [] data_ = line.strip().split(' ') # 字典的value的列表 for da in data_: if len(da) != 0: data.append(da) # print(data) for i in range(len(title)): # 一個完整的for循環將一行的數據添加到字典中 dic[title[i]] = data[i] lst.append(dic) print(lst) #老師講解的,利用split()不傳入參數默認以空白做爲切割符的特性 # 打開文件 f = open("t6", mode="r", encoding="utf-8") # 處理標題 ['序號', '部門', '人數', '平均年齡', '備註'] title = f.readline().strip().split() print(title) # 準備存放結果的列表 lst = [] # 獲取到數據 for line in f: # line : 1 python 30 26 單身狗 data = line.strip().split() # 切割處理 [1,python,30,26,單身狗] dic = {} # 循環標題的索引. 標題的索引和數據的索引是一一對應的 for i in range(len(title)): dic[title[i]] = data[i] # 把數據獲取到, 放在字典中 lst.append(dic) # 把字典裝列表 print(lst) # 明日默寫: # 就是第4題的代碼(課上講過)。 import os with open("alex.txt",mode="r",encoding="utf-8")as f,\ open("alex_1.txt",mode="w",encoding="utf-8")as f1: for line in f: line = line.replace("alex","SB") f1.write(line) os.remove("alex.txt") os.rename("alex_1.txt","alex.txt")
# a,將原文件所有讀出來並打印。 f = open("a1.txt", mode="r", encoding="utf-8") print(f.read()) f.close() # b,在原文件後面追加一行內容:信不信由你,反正我信了。 f = open("a1.txt", mode="a", encoding="utf-8") f.write("信不信由你,反正我信了") f.close() # c,將原文件所有讀出來,並在後面添加一行內容:信不信由你,反正我信了。 f = open("a1.txt", mode="r+", encoding="utf-8") print(f.read()) f.write("信不信由你,反正我信了") f.close() # d,將原文件所有清空,換成下面的內容: # 天天堅持一點, # 天天努力一點, # 天天多思考一點, # 慢慢你會發現, # 你的進步愈來愈大。 f = open("a1.txt", mode="w", encoding="utf-8") f.write("天天堅持一點,\n") f.write("天天努力一點,\n") f.write("天天多思考一點,\n") f.write("慢慢你會發現,\n") f.write("你的進步愈來愈大。\n") f.flush() f.close() # e,將原文件內容所有讀取出來, # 並在‘我說的都是真的。哈哈’這一行的前面加一行,‘大家就信吧~’ # 而後將更改以後的新內容, # 寫入到一個新文件:a1.txt。 import os with open("a1.txt", mode="r", encoding="utf-8") as f1, \ open("a1.txt_副本", mode="w", encoding="utf-8") as f2: for line in f1: if line.strip() == "我說的都是真的。哈哈": f2.write("大家就信吧~\n") f2.write(line) os.remove("a1.txt") os.rename("a1.txt_副本", "a1.txt") # a,以r+的模式打開原文件,判斷原文件是否可讀,是否可寫。 f = open("t1.txt", mode="w", encoding="utf-8") print(f.readable()) print(f.writable()) # b,以r的模式打開原文件,利用for循環遍歷文件句柄。 f = open("t1.txt", mode="r", encoding="utf-8") for line in f: print(line) # c,以r的模式打開原文件,以readlines()方法讀取出來,並循環遍歷 # readlines(),並分析b,與c 有什麼區別?深刻理解文件句柄與 # readlines()結果的區別。 f = open("t1.txt", mode="r", encoding="utf-8") for line in f.readlines(): print(line) # d,以r模式讀取‘葫蘆娃’前三個字符。 f = open("t1.txt", mode="r", encoding="utf-8") print(f.read(3)) # e,以r模式讀取第一行內容,並去除此行先後的空格,製表符,換行符。 f = open("t1.txt", mode="r", encoding="utf-8") print(f.readline().strip()) # f,以r模式打開文件,從‘風吹雨打.....’開始讀取,一直讀到最後。 f = open("t1.txt", mode="r", encoding="utf-8") f.readline() f.readline() content = f.read() print(content) # g,以a+模式打開文件,先追加一行:‘老男孩教育’而後在從最開始將 # 原內容所有讀取出來。 f = open("t1.txt", mode="a+", encoding="utf-8") f.write('\n老男孩教育') f.seek(0) print(f.read()) # h,截斷原文件,留下內容:‘葫蘆娃’ f = open("t1.txt", mode="r+", encoding="utf-8") f.truncate(9) # 3,文件t3內容:每一行內容分別爲商品名字,價錢,個數。 f = open('t3', mode="r", encoding="utf-8") lst = [] for line in f: a, b, c = line.split() # 默認就是按照空白切割 dic = {"name":a, "price":int(b), "amout":int(c)} lst.append(dic) print(lst) # 4. 把文件中的alex替換成sb import os with open("t4", mode="r", encoding="utf-8") as f1, \ open("t4_副本", mode="w", encoding="utf-8") as f2: for line in f1: line = line.replace("alex", "sb") f2.write(line) os.remove("t4") os.rename("t4_副本", "t4") # 6. # 打開文件 f = open("t6", mode="r", encoding="utf-8") # 處理標題 ['序號', '部門', '人數', '平均年齡', '備註'] title = f.readline().strip().split() print(title) # 準備存放結果的列表 lst = [] # 獲取到數據 for line in f: # line : 1 python 30 26 單身狗 data = line.strip().split() # 切割處理 [1,python,30,26,單身狗] dic = {} # 循環標題的索引. 標題的索引和數據的索引是一一對應的 for i in range(len(title)): dic[title[i]] = data[i] # 把數據獲取到, 放在字典中 lst.append(dic) # 把字典裝列表 print(lst) # 5. f = open("t5", mode="r", encoding="utf-8") result = [] for line in f: # name:apple price:10 amount:3 year:2012 dic = {} # 每行是一個字典 lst = line.split() for el in lst: # name:apple k, v = el.split(":") if k != 'year': dic[k] = v result.append(dic) print(result) # 計算總價 # [{'name': 'apple', 'price': '10', 'amount': '3'}, {'name': 'tesla', 'price': '100000', 'amount': '1'}] sum = 0 for d in result: sum += int(d['price']) * int(d['amount']) print(sum)