|
发表于 2025-4-11 20:46:10
|
显示全部楼层
问答题:
0.如果尝试使用 open() 函数打开一个不存在的文件,是否会报错?
会的
1. “在打开一个文件对象之后,大多数的文件操作都是在缓冲区里面进行的。因此,如果希望将文件内容保存,我们需要使用 close() 方法关闭文件对象,这样数据才能从缓冲区写入到文件中。”,那么请问大家,有没有办法在不关闭文件对象的情况下,进行内容的保存呢?
使用 flush() 方法,这会强制将缓冲区内容写入磁盘,但文件仍保持打开状态。
2. 请问如果指定 readline(size=-1) 方法的 size 参数为 3,那么表示的含义是什么?
在 Python 中, readline(size=-1) 方法的 size 参数用于指定读取的最大字节数。当 size=3 时,表示的含义是:
从文件中读取一行内容,但最多只读取该行的前 3 个字节。
如果该行不足 3 个字节,则返回整行内容。如果该行超过 3 个字节,则只返回前 3 个字节,文件指针会停留在第 3 个字节处。
3. 请问下面代码会在文件中写入几行字符串呢?
>>> f = open("FishC.txt", "w") >>> f.writelines(["FishA", "FishB", "FishC"]) >>> f.close()
这段代码会在文件中写入 1 行字符串,而不是 3 行。原因如下:
writelines() 方法会将列表中的字符串连续写入,不会自动添加换行符。
最终文件内容会是:"FishAFishBFishC"(所有字符串连在一起)。
4. 请问在课堂中的代码,为什么我们写入的时候只有一个换行符,但是使用 for 语句读取并打印出来却多了一个空白行呢?
>>> f = open("FishC.txt", "w")
>>> f.writelines(["I love FishC.\n", "I love my wife."])
>>> f.close()
>>> f = open("FishC.txt", "r")
>>> for each in f:
... print(each)
I love FishC.
I love my wife.
这个现象是因为 Python 的文件迭代行为和 print() 函数的特性共同作用导致的。具体原因如下:
1. 文件中实际只有 2 行内容:
第一行 "I love FishC.\n" (包含换行符)
第二行 "I love my wife." (没有换行符)
2. 当使用 for each in f: 迭代文件对象时:
每次迭代会返回一行内容,包括行尾的换行符
所以 each 的值分别是:
第一次: "I love FishC.\n"
第二次: "I love my wife."
3. print() 函数会自动在输出末尾添加换行符:
当打印 "I love FishC.\n" 时:
字符串本身有换行符
print() 又加一个换行符
结果就是两个换行,看起来多了一行空白
当打印 "I love my wife." 时:
字符串没有换行符
print() 加一个换行符
显示正常
5. 请问下面代码为什么会报错?
>>> f = open("C:\Users\goodb\Desktop\FishC.txt", "w")
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
这个错误是因为在Python字符串中,反斜杠 \ 被用作转义字符的开头。在路径 "C:\Users\goodb\Desktop\FishC.txt" 中, \U 被Python解释器误认为是Unicode转义序列的开头(格式应为 \Uxxxxxxxx ),导致语法错误。
6. 使用 "w" 模式打开文件之前一定要注意什么?
在使用 "w" 模式打开文件时,有几个关键注意事项:
文件会被清空 :如果文件已存在,内容会被立即清空(不可恢复)
路径安全性 :确保路径正确,避免误删重要文件
权限问题 :确保程序有写入权限
7. 如果一个文件不存在,是否可以使用 "a" 模式将其打开?
可以使用 "a" 模式打开一个不存在的文件,Python 会自动创建该文件。
与 "w" 模式的区别:
"a" :文件不存在则创建,存在则追加(保留原内容)
"w" :文件不存在则创建,存在则清空
8. 文件指针的作用是什么?
文件指针是Python文件对象内部维护的一个位置标记,用于跟踪当前在文件中的读写位置。它的主要作用包括:
定位功能 :记录当前操作位置(以字节为单位)
导航功能 :可以通过 seek() 方法移动指针位置
读写分离 :控制读/写操作的起始点
9. 什么是 EOF?
EOF(End Of File) 是文件结束的标志,表示已经到达文件的末尾。
10. 如何知道文件指针当前指定的位置?
在Python中,可以使用文件对象的 tell() 方法来获取文件指针当前的位置(以字节为单位)。
代码
with open("test.txt", "r") as f:
# 初始位置(通常是0)
print(f.tell()) # 输出: 0
# 读取5个字符后
f.read(5)
print(f.tell()) # 输出: 5
# 读取整行后
f.readline()
print(f.tell()) # 输出当前行结束位置
# 移动到文件末尾
f.seek(0, 2) # 第二个参数2表示从文件末尾计算
print(f.tell()) # 输出文件总字节数
动动手:
0. 请下载文件(  FishC.txt (25 Bytes, 下载次数: 1055) ),编写代码,截取其中第 10~15 个字符,并保存为新文件(FishD.txt)。
代码
original_string = "FishAFishBFishCFishDFishE"
substring = original_string[9:16]
with open('/Users/kusunoki/Desktop/小甲鱼Python 学习/小甲鱼课后练习/FishD.txt', 'w') as file:
file.write(substring)
print(f"已成功截取字符:{substring}")
print("并保存到FishD.txt文件中")
1. 还是上一题的那个文件(FishC.txt),这次请编写代码,截取前面 15 个字符,并保存覆盖保存原文件。
代码
original_string = "FishAFishBFishCFishDFishE"
substring = original_string[:16]
with open('/Users/kusunoki/Desktop/小甲鱼Python 学习/小甲鱼课后练习/FishD.txt', 'w') as file:
file.write(substring)
print(f"已成功截取字符:{substring}")
print("并覆盖保存原文件")
2. 请编写一个源代码(open_myself.py),它的功能就是打开自己的源文件,然后打印出来。
代码
import os
current_file = os.path.abspath(__file__)
# 打开自己的源文件并读取内容
with open(current_file, 'r', encoding='utf-8') as file:
content = file.read()
# 打印文件内容
print("以下是源文件的内容:")
print("-" * 30)
print(content)
print("-" * 30)
print("文件内容打印完毕") |
|