赞
踩
禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
参考教程:B站视频讲解——https://space.bilibili.com/3546616042621301
任务描述
本关任务:编写一个能读文件全部内容到一个字符串的小程序。
相关知识
为了完成本关任务,你需要掌握:
文件的打开
内置函数open(file, mode='r', encoding=None)
可以打开 file
并返回对应的文件对象(file object)
。
file
是一个可以带路径的文件名,mode
用于指定打开文件的模式。默认值是 'r'
,表示以文本模式打开并读取文件。其他常见模式有:写入模式 'w'
(已存在文件会被清空)、独占创建模式 'x'
、追加写入模式 'a'
。
encoding
用于在文本模式下指定编码格式,默认根据当前平台决定编码格式。
当使用 open()
以文本模式 ('w'
, 'r'
, 'wt'
, 'rt'
等) 打开文件时,它将返回 io.TextIOBase
的一个子类io.TextIOWrapper
。
file = '/data/bigfiles/静夜思.txt'
f = open(file, mode='r', encoding='utf-8') # f是为文件对象命名
print(f)
输出:
<_io.TextIOWrapper name='静夜思.txt' mode='r' encoding='utf-8'>
建议将open()
函数用上下文管理器容器中,减少遇到异常关闭文件出错的问题。
file = '/data/bigfiles/静夜思.txt'
with open(file, mode='r', encoding='utf-8') as f: # 文件对象命名放在as后面
print(f) # 操作文件的语句放在缩进的语句块中,离开缩进就关闭文件
输出:
<_io.TextIOWrapper name='静夜思.txt' mode='r' encoding='utf-8'>
读文件到字符串
read(size
) 无参数或参数为-1
时,读取全部文件内容;file = '/data/bigfiles/静夜思.txt'
with open(file, mode='r', encoding='utf-8') as f: # 为文件对象命的名放在as后面
txt = f.read() # 将文件全部内容读入到字符串txt中
print(txt)
输出:
静夜思
李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
编程要求
根据提示,在右侧编辑器补充代码,输出文件“出塞.txt
”全部字符。文件路径和文件名为:‘/data/bigfiles/出塞.txt
’
测试说明
平台会对你编写的代码进行测试:
测试输入:
无
预期输出:
出塞
王昌龄(唐)
秦时明月汉时关,万里长征人未还。
但使龙城飞将在,不教胡马度阴山。
提示:
\n
”本单元可能用到的文件下载:
出塞.txt
8.1 静夜思.txt
唐诗三百首 (2022).txt
7.8 唐诗三百首.txt
8.2 score.csv
8.5 score.csv
开始你的任务吧,祝你成功!
参考代码
# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
with open('/data/bigfiles/出塞.txt', mode='r', encoding='utf-8') as f:
print(f.read())
任务描述
本关任务:编写一个能读文件前n个字符的小程序。
相关知识
为了完成本关任务,你需要掌握:
读文件到字符串
2. read(size)
当参数size
为大于或等于0
的整数时,读取size
个字符。
file = '/data/bigfiles/静夜思.txt'
with open(file, mode='r', encoding='utf-8') as f: # 为文件对象命的名放在as后面
txt = f.read(3) # 将文件前3个字符读入到字符串txt中
print(txt)
输出:
静夜思
编程要求
根据提示,在右侧编辑器补充代码,输入一个正整数n,输出“出塞.txt
”前n
个字符。
测试说明
平台会对你编写的代码进行测试:
测试输入:
3
预期输出:
静夜思
测试输入:
13
预期输出:
静夜思
李白
床前明月光,
提示:
\n
”开始你的任务吧,祝你成功!
参考代码
# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
with open('/data/bigfiles/出塞.txt', mode='r', encoding='utf-8') as f:
print(f.read(int(input())))
任务描述
本关任务:编写一个能逐行读取并输出文件内容的小程序。
相关知识
为了完成本关任务,你需要掌握:
读文件到字符串
f.readline()
从文件中读取单行数据;字符串末尾保留换行符(\n
),空行使用 ‘\n
’ 表示,该字符串只包含一个换行符。f.readline()
返回空字符串时,表示已经到达了文件末尾。file = '/data/bigfiles/静夜思.txt'
with open(file,'r',encoding = 'utf-8') as poem: # 打开文件创建文件对象,命名为poem
while txt := poem.readline(): # 逐行读文件,直至文件结束
print(txt.strip()) # 去除行末的换行符后输出当前读到的字符串
输出:
静夜思
李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
f.readline(size)
当参数size
为大于或等于0
的整数时,从指针所在处向后最多读取当前行的前size
个字符,当前行剩余字符少于size
时,读取到行末。编程要求
根据提示,在右侧编辑器补充代码,输入一个文件名,用readline()
方法逐行读取并输出文件内容,输出时去除每行末的换行符。
测试说明
平台会对你编写的代码进行测试:
测试输入:
静夜思.txt
预期输出:
静夜思
李白
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
开始你的任务吧,祝你成功!
参考代码
# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
file = '/data/bigfiles/' + input()
with open(file,'r',encoding = 'utf-8') as f:
for line in f.readlines():
print(line.strip())
任务描述
本关任务:编写一个能读取文件到列表中的小程序。
相关知识
为了完成本关任务,你需要掌握:
读文件到列表
readlines()
\n
’。file = '/data/bigfiles/静夜思.txt'
with open(file, 'r', encoding='utf-8') as poem: # 打开文件创建文件对象,命名为poem
poem_ls = poem.readlines() # 读取文件内容到列表
print(poem_ls)
输出:
['静夜思\n', '李白\n', '床前明月光,疑是地上霜。\n', '举头望明月,低头思故乡。']
readlines(hint)
hint
为大于或等于0
的整数时,返回文件从头到第hint
个字符所在的行末。file = '/data/bigfiles/静夜思.txt'
with open(file, 'r', encoding='utf-8') as poem: # 打开文件创建文件对象,命名为poem
poem_ls = poem.readlines(10) # 读取文件,到第10个字符所在的行末
print(poem_ls)
输出:
['静夜思\n', '李白\n', '床前明月光,疑是地上霜。\n']
编程要求
根据提示,在右侧编辑器补充代码,输入一个文件名,将该文件内容转为列表输出。
测试说明
平台会对你编写的代码进行测试:
测试输入:
静夜思.txt
预期输出:
['静夜思\n', '李白\n', '床前明月光,疑是地上霜。\n', '举头望明月,低头思故乡。']
提示:
\n
”开始你的任务吧,祝你成功!
参考代码
# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
with open(input(), 'r', encoding='utf-8') as f:
print(f.readlines())
任务描述
本关任务:编写一个能读取文件中的数据到二维列表的小程序。
相关知识
为了完成本关任务,你需要掌握:
字符串切分
txt.split(sep)
sep
对字符串txt
进行切分,返回一个列表。row = '姓名,C,Java,Python,C#\n'
print(row.strip())
# 去除行末换行符,姓名,C,Java,Python,C#
print(row.strip().split(',')) # 去除换行符后根据逗号切分为列表
# ['姓名', 'C', 'Java', 'Python', 'C#']
遍历文件
虽然readlines()
方法可以将文件读取到二维列表中,但其元素仍为字符串。
很多存放数据的文件中每行数据是用逗号或空格分隔的,可以直接切分为列表,再加入到列表中,构成二维列表。
对于这样的需求,建议使用遍历文件对象的方法。
file = '../csv/8.2 score.csv'
score_ls = [] # 创建一个空列表
with open(file, 'r', encoding='utf-8') as fr: # 打开文件创建文件对象,命名为poem
for row in fr: # 遍历文件对象,row为当前行
lst = row.strip().split(',') # 当前行切分为一个列表
score_ls.append(lst) # 将当前行切分得到的列表附加到score_ls中
print(score_ls) # 输出二维列表
列表推导式方法:
file = '../csv/8.2 score.csv'
with open(file, 'r', encoding='utf-8') as fr: # 打开文件创建文件对象,命名为poem
score_ls = [row.strip().split(',') for row in fr] # 遍历文件对象,row为当前行
print(score_ls) # 输出二维列表
输出:
[['姓名', 'C', 'Java', 'Python', 'C#'],
['罗明', '95', '96', '85', '63'],
['朱佳', '75', '93', '66', '85'],
['李思', '86', '76', '96', '93'],
['郑君', '88', '98', '76', '90'],
['王雪', '99', '96', '91', '88']]
编程要求
根据提示,在右侧编辑器补充代码,输入一个文件名,先读输出文件的第一行,再将该文件其他内容转为列表输出。
测试说明
平台会对你编写的代码进行测试:
测试输入:
score.csv
预期输出:
[['姓名', 'C', 'Java', 'Python', 'C#'], ['罗明', '95', '96', '85', '63'], ['朱佳', '75', '93', '66', '85'], ['李思', '86', '76', '96', '93'], ['郑君', '88', '98', '76', '90'], ['王雪', '99', '96', '91', '88']]
提示:
\n
”开始你的任务吧,祝你成功!
参考代码
# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
with open('/data/bigfiles/'+input(), 'r', encoding='utf-8') as f:
ls = [line.strip().split(',') for line in f]
print(ls)
任务描述
本关任务:编写一个能将指定序号的唐诗写入到单独的文件中的小程序。
相关知识
为了完成本关任务,你需要掌握:
文件写入
f.write(s)
s
写入到文件对象f中。file = '233李白:静夜思.txt'
poem = '静夜思\n李白\n床前明月光,疑是地上霜。\n举头望明月,低头思故乡。\n'
with open(file, 'w', encoding='utf-8') as fw: # 打开文件创建文件对象,命名为poem
fw.write(poem)
编程要求
根据提示,在右侧编辑器补充代码,输入一个3
位数字字符表示的诗的序号,从文件“/data/bigfiles/唐诗三百首.txt
”中读出指定序号的诗句,再将该诗单独写入到以该诗序号开始的行为文件名的文件中。
测试说明
平台会对你编写的代码进行测试:
测试输入:
237
预期输出:
创建文件:
237刘长卿:送灵澈.txt
文件内容如下:
237刘长卿:送灵澈
苍苍竹林寺,杳杳钟声晚。
荷笠带斜阳,青山独归远。
提示:
\n
”开始你的任务吧,祝你成功!
参考代码
# 禁止转载,原文:https://blog.csdn.net/qq_45801887/article/details/139258793
# 参考教程:B站视频讲解 https://space.bilibili.com/3546616042621301
def get_poem(file):
"""读唐诗300首,定位到用户输入的序号的诗,将该首诗读取为一个字符串,返回去除末尾空白字符的字符串"""
poem = ''
poet_flag = False
with open(file, 'r', encoding='utf-8') as f:
for line in f:
if line[:3] == str(num):
poem = poem + line
poet_flag = True
elif line[0] in '0123456789':
poet_flag = False
elif poet_flag:
poem = poem + line
return poem
def write_poem(line):
"""参数是包含指定序号诗句的字符串,提取诗的标题行做为要写入的文件名,将全部诗句按顺序写入到文件中,返回诗的标题行"""
title = line.split(maxsplit=1)[0]
with open(title+'.txt', 'w', encoding='utf-8') as f:
f.write(line)
return title
def check_file(file):
"""参数是新创建的文件名,读取新创建并写入诗句的文件,检查是否写入成功,无返回值"""
with open(file, 'r', encoding='utf-8') as fr:
print(fr.read()) # 文件读取为一个字符串并输出
if __name__ == '__main__':
filename = '/data/bigfiles/唐诗三百首.txt' # 源文件路径
num = input() # 输入序号
poem_str = get_poem(filename) # 读取指定序号的诗为字符串
file_title = write_poem(poem_str) # 字符串写入文件,并返回标题
check_file(file_title+'.txt') # 查看写入的文件,输出诗的内容
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。