嵩天老師的零基礎Python筆記:https://www.bilibili.com/video/av15123607/?from=search&seid=10211084839195730432#page=25 中的38-41講
# -*- coding: utf-8 -*-
#嵩天老師的零基礎Python筆記:https://www.bilibili.com/video/av15123607/?from=search&seid=10211084839195730432#page=25 中的38-41講
# 文件
# 文件是存儲在外部介質上的數據或信息的集合
# 文件是有序的數據序列
# 常用的編碼
# ASCII碼是標準化字符集
# 7個二進制位編碼
# 表示128個字符 # ord() 將字符轉化為ASCII碼, chr() 將ASCII碼轉化為字符
#
# Unicode :為每種語言中的每個字符設定了統一並且唯一的二進制編碼,以滿足跨語言跨平臺的需求。
# 有65536個字符的編碼空間
# 它是十六進制的編碼方式
#
# UTF-8 : 為一種可變長度的Unicode編碼,它是一種多字節的編碼體系
# 英文對應Unicode的單字節,中,日,韓文對應Unicode的三字節
# 可以用一到四個字節的不同長度來表示
#
# Python中字符串類型是未編碼的類型,我們可以用encode()來進行編碼操作,使用decode()來進行解碼操作
#
# GBK編碼 :全稱為《漢字內碼擴展規範》
# 雙字節編碼
#
# 文件數據按其組織形式的不同可分為文本文件和二進制文件
# 文本文件:以ASCII碼方式存儲的文件,英文,數字等字符存儲在ASCII碼上
# 文本文件是基於字符定長的ASCII碼文件
# Python使用常規換行符(\n)表示換行
# 二進制文件
# 廣義二進制文件:文件在外部設備的存放形式為二進制的文件
# 狹義二進制文件:除文本文件外的所有文件
# 二進制文件包括照片,音樂,視頻,計算機程序等
# 二進制文件優點:
# 更加節省空間
# 采用二進制無格式存儲
# 二進制數據表示更為精確,不會造成有效位的丟失。
# 二進制文件編碼是變長的,靈活利用率更高
# 不同的二進制文件解碼方式不同
#
# 文件操作:
# 讀取
# 寫入
# 定位
# 計算,追加等
#
# 打開文件
# open()
# <variable> = open(<name>,<mode>)
# mode形式:r:只讀,如果文件不存在,則輸出錯誤
# w: 只寫,如果文件不存在,則自動創建文件
# a: 附加到文件末尾
# rb:只讀二進制文件,如果文件不存在,則輸出錯誤
# wb:只寫二進制文件,如果文件不存在,則自動創建文件
# ab: 附加到二進制文件末尾
# r+ :讀寫
# read() 返回值為包含整個文件內容的一個字符串
# readline() 返回值為文件下一行內容的一個字符串
# readlines() 返回值為整個文件內容的列表,每項是以換行符為結尾的一行字符串。
# write() 把含有文本數據或二進制數據塊的字符串定稿到文本中
# writelines() 針對列表操作,接受一個字符串列表作為參數,將它們寫入文件,並且行結束符不會被自動加入
#
#infle = open(r"C:\Users\Admin\Desktop\宋冬野 - 斑馬,斑馬.flac",‘rb‘) #文件路徑要根據實際情況填列
#print(infle)
#infile = open(r"C:\Users\Admin\Desktop\123.txt",‘r‘)
#for i in range(10):
# line = infile.readline()
# print(line[:-1])
#>>>outfile = open(r‘C:\Users\Admin\Desktop\123.txt‘,‘w‘) #文件路徑要根據實際情況填列
#>>>outfile.writelines(["Hello",‘ ‘,‘world‘]) #寫入內容後原文件內容會被清除
#>>>outfile.close()
#>>>infile = open(r‘C:\Users\Admin\Desktop\123.txt‘,‘r‘) #文件路徑要根據實際情況填列
#>>>infile.read()
#‘Hello world‘
#
# 文件遍歷:最常見的文件處理方法,如拷貝,根據數據文件定義行走路徑,將文件由一種編碼轉換成另一種編碼。
# 遍歷文件模板:
# 通用代碼框架:
#file = open(r‘文件路徑‘,‘r‘)
#for line in file.readlines():
# 編寫程序處理一行文件內容
#file.close()
# 簡化代碼框架
#file = open(r‘文件路徑‘,‘r‘)
#for line in file:
# 編寫程序處理一行文件內容
#file.close()
#
# 文件拷貝代碼
"""
def main():
f1 = input("請輸入一個需要拷貝的文件名稱: ").strip()
f2 = input("請輸入一個拷貝後的目標文件名稱: ").strip()
infile = open(f1,‘r‘)
outfile = open(f2,‘w‘)
countLines = countChars = 0
for line in infile:
countLines += 1
countChars += len(line)
outfile.write(line)
print(countLines, "lines and ", countChars, "chars copied.")
infile.close()
outfile.close()
main()
"""
"""
data.txt
300,0,144,1,0,0 #元素1(第一列)路徑前進像素數
300,0,144,0,1,0 #元素2(第二列)轉動方向,0為左,1為右
300,0,144,0,0,1 #元素3(第三列)轉動角度
300,0,144,1,1,0 #元素3(最後) 繪制顏色的RGB值
300,0,108,0,1,1
184,0,72,1,0,1
184,0,72,0,0,0
184,0,72,0,0,0
184,0,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
"""
# 根據data.txt文件中的數據在窗口中進行動態路徑繪制
import turtle
def main():
turtle.title("數據驅動的動態路徑繪制")
turtle.setup(800,600,0,0)
pen = turtle.Turtle()
pen.color("red")
pen.width(5)
pen.shape("turtle")
pen.speed(5)
result = []
file = open(r"C:\Users\fengbo\Desktop\data.txt","r") #文件路徑要根據實際情況填列
for line in file:
print(type(line)) #查看line的屬性
print(line.split(‘,‘)) #查看分割後line的存儲信息
result.append(list(map(float,line.split(‘,‘))))
print(result)
print(len(result))
for i in range(len(result)):
pen.color((result[i][3],result[i][4],result[i][5]))
pen.fd(result[i][0])
if result[i][1]:
pen.rt(result[i][2])
else:
pen.lt(result[i][2])
pen.goto(0, 0)
if __name__ == ‘__main__‘:
main()
# 文件信息合並程序
ftele1 = open(r‘C:\Users\fengbo\Desktop\電話1106.txt‘,‘rb‘)
ftele2 = open(r‘C:\Users\fengbo\Desktop\郵箱1106.txt‘,‘rb‘)
ftele1.readline() #跳過第一行
ftele2.readline() #跳過第一行
lines1 = ftele1.readlines()
lines2 = ftele2.readlines()
list1_name = []
list2_name = []
list1_tele = []
list2_email = []
for line in lines1: #獲取第一個文本中的姓名和電話信息
elements = line.split()
list1_name.append(str(elements[0].decode(‘gbk‘)))
list1_tele.append(str(elements[1].decode(‘gbk‘)))
for line in lines2:
elements = line.split()
list2_name.append(str(elements[0].decode(‘gbk‘)))
list2_email.append(str(elements[1].decode(‘gbk‘)))
#按索引方式遍歷姓名列表1
for i in range(len(list1_name)):
s = ‘‘
if list1_name[i] in list2_name:
j = list2_name.index(list1_name[i]) #找到姓名,列表1對應列表2中的姓名
s = ‘\t‘.join([list1_name[i], list1_tele, list2_email[j]])
s += ‘\n‘
else:
s = ‘\t‘.join([list1_name[i], list1_tele, str(‘ ----- ‘)])
s += ‘\n‘
lines.append(s)
#處理姓名列表2中剩余的姓名
for i in range(len(list2_name)):
s = ‘‘
if list2_name[i] not in list1_name:
s = ‘\t‘.join([list2_name[i], str(‘ ----- ‘), list2_email[i]])
s += ‘\n‘
lines.append(s)
ftele3 = open(r‘C:\Users\fengbo\Desktop\電話郵箱1106.txt‘,‘w‘)
ftele3.write(lines)
ftele3.close()
ftele1.close()
ftele2.close()
print("個人信息簿合並完成。") #需要學完正則表達式後再來回顧
嵩天老師的零基礎Python筆記:https://www.bilibili.com/video/av15123607/?from=search&seid=10211084839195730432#page=25 中的38-41講