Day 24 - 文件、目录与路径 - Python学习笔记
Udemy - 100 Days of Code: The Complete Python Pro Bootcamp
Day 24 - Intermediate - Files, Directories and Paths
目录
- 182. Add a High Score to the Snake Game
- 183. Open, Read and Write Files
- 184. Read and Write the High Score to a File
- 185. Relative and Absolute File Paths
- 186. Mail Merge Project

182. Add a High Score to the Snake Game
Snake Game 完整笔记
class Scoreboard(Turtle): def __init__(self): super().__init__() self.score = 0 self.high_score = 0 self.color("white") self.hideturtle() self.penup() self.goto(0, 260) self.update_scoreboard() def update_scoreboard(self): self.clear() self.write(f"Score: {self.score} High Score: {self.high_score}", align=ALIGNMENT, font=FONT) def increase_score(self): self.score += 1 self.update_scoreboard() def reset(self): if self.score > self.high_score: self.high_score = self.score self.score = 0 self.update_scoreboard()class Snake:...def reset(self): for seg in self.segments: seg.goto(1000, 1000) self.segments.clear() self.create_snake() self.head = self.segments[0]# Detect collision with wall
if (snake.head.xcor() > 280 or snake.head.xcor() < -280 or snake.head.ycor() > 280 or snake.head.ycor() < -280): scoreboard.reset() snake.reset() # Detect collision with tail
for segment in snake.segments[1:]: if snake.head.distance(segment) < 10: scoreboard.reset() snake.reset()
183. Open, Read and Write Files
读写文件
Open
open(file, mode='rt', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明
file
:文件路径或文件描述符
mode
:打开模式
"r"
读取模式(默认),"w"
覆盖模式,"a"
追加模式,"x"
独占创建"t"
文本模式(默认),"b"
二进制模式"+"
可读可写
buffering
:缓冲策略
0
无缓冲(仅二进制模式)1
行缓冲(仅文本模式)>1
指定缓冲区大小(字节)-1
系统默认缓冲策略
encoding
:编码格式(仅文本模式)(如 utf-8,gbk,ascii)
errors
: 编码报错方式(仅文本模式)(如 “strict” 直接报错, “ignore” 忽略错误字符, “replace” 替换成 �)
newline
:换行符设置(仅文本模式)(None,“”,“\n”,“\r”,“\r\n”)
closefd
:关闭文件时是否同时关闭底层文件描述符
opener
:自定义打开器函数
Read
- 读取文件:
read(size=-1)
- 按行读取:
readline(size=-1)
- 读取行列表:
readlines(hint=-1)
Write
- 写入文件:
write(string)
- 写入行列表:
writelines(lines)
# Read Files
file = open("file.txt")
print(file.read())
file.close() with open("file.txt") as file: print(file.read()) with open("file.txt") as file: print(file.readline())with open("file.txt") as file: print(file.readlines()) with open("file.txt") as file: for line in file: print(line)# Write Files
with open("file.txt", "a") as file: file.write("append")with open("file.txt", "w") as file:file.write("line 1\nline 2\nline 3\n")with open("file.txt", "w") as file:file.writelines(["line 1\n", "line 2\n", "line 3\n"])# Create Files
file = open("file.txt", "x")
file = open("file.txt", "a")
file = open("file.txt", "w")
184. Read and Write the High Score to a File
Replit
class Scoreboard(Turtle): def __init__(self): super().__init__() self.score = 0 try:with open("data.txt") as file:self.high_score = int(file.read())except FileNotFoundError:self.high_score = 0 self.color("white") self.hideturtle() self.penup() self.goto(0, 260) self.update_scoreboard()def update_scoreboard(self): self.clear() self.write(f"Score: {self.score} High Score: {self.high_score}", align=ALIGNMENT, font=FONT) def increase_score(self): self.score += 1 self.update_scoreboard()def reset(self): if self.score > self.high_score: self.high_score = self.score with open("data.txt", "w") as file: file.write(f"{self.high_score}") self.score = 0 self.update_scoreboard()
185. Relative and Absolute File Paths
Root
└── Work├── app.log└── Project├── main.py├── file.txt└── assets└── img.png
Absolute File Path 绝对文件路径
Root Directory 根目录:/Work/Project/file.txt
Relative File Path 相对文件路径
Parent Directory 上级目录:../app.log
Same Directory 同级目录:./file.txt
Subdirectory 下级目录:assets/img.png
186. Mail Merge Project
Replit
"""
Dear [name], You are invited to my birthday this Saturday. Hope you can make it! Angela
"""PLACEHOLDER = "[name]" with open("./Input/Names/invited_names.txt") as names_file: names = names_file.readlines() with open("./Input/Letters/starting_letter.txt") as letter_file: letter_contents = letter_file.read() for name in names: stripped_name = name.strip() new_letter = letter_contents.replace(PLACEHOLDER, stripped_name) with open(f"./Output/ReadyToSend/letter_for_{stripped_name}.txt", "w") as completed_letter:completed_letter.write(new_letter)