
Python读取文件找到长度最大的单词
读取文件找到长度最大的单词
题目:程序根目录下的 word.txt 文件中保存有n个单词,每个单词一行。请使用Python编写一个一个程序,读取words.txt文件,统计长度最大的单词输出到控制台
输出结果如下:
sophisticated:13
程序示例:
w = [] # 存放文件中读出并经过处理的单词
y = [] # 存放w中每个单词的长度
with open('words.txt', 'r') as fp: # 以只读的方式打开word.txt
for i in fp.readlines(): # 遍历文件每一行
if i.split(): # i不是空行
i = i.strip() # 把单词两边空格删除
w.append(i) # 单词空格删除后,存入w
for i in w: # 遍历w
y.append(len(i)) # 将w中单词的长度存入y
m = max(y) # 找出长度最大值
for j in w: # 遍历w
if len(j) == m: # 找到w中长度为最大值m的单词
print(j, ":", m) # 输出这个单词和长度
解析(逐行):
第1行:
w = [] # 存放文件中读出并经过处理的单词
定义一个列表,这里列表w用来存放从文件中读出并经过处理(去除单词两侧空格)的单词
第2行
y = [] # 存放w中每个单词的长度
定义一个列表,这里列表y用来存放上面数组w中各个单词的长度
第3行
with open('words.txt', 'r') as fp: # 以只读的方式打开word.txt
[代码块] # 这里代码块后面解释
使用 ’r’(只读模式)打开存在程序目录下的 ‘words.txt’ 文件,并给其指定变量==fp==
此处涉及一个with as语句和open()方法,下面是详细解释:
with as语句:
with as 语句的基本语法格式为:
with 表达式 [as target]:
代码块
此格式中,用 [] 括起来的部分可以使用,也可以省略。其中,target 参数用于指定一个变量,该语句会将 expression 指定的结果保存到该变量中。with as 语句中的代码块如果不想执行任何语句,可以直接使用 pass 语句代替。
通过使用with as 语句,==即便最终没有关闭文件,修改文件内容的操作也能成功==。
open()方法有两个参数:
open(‘参数1’,’参数2’)
参数1为要创建或打开文件的文件名称,该名称要用引号(单引号或双引号都可以)括起来。需要注意的是,如果要打开的文件和当前执行的代码文件位于同一目录,则直接写文件名即可;否则,此参数需要指定打开文件所在的完整路径。
参数2为用于指定文件的打开模式。可选的==部分==打开模式如下表 所示。如果不写,则默认以只读(r)模式打开文件。
模式 | 含义 | 注意事项 |
---|---|---|
r | 只读模式打开文件,读文件内容的指针会放在文件的开头。 | 操作的文件必须存在。 |
w | 以只写模式打开文件,若该文件存在,打开时会清空文件中原有的内容。 | 操作的文件必须存在。 |
a | 以追加模式打开一个文件,对文件只有写入权限,如果文件已经存在,文件指针将放在文件的末尾(即新写入内容会位于已有内容之后);反之,则会创建新文件。 | / |
第4行
for i in fp.readlines(): # 遍历文件每一行
循环遍历文件每一行
此处涉及一个readlines()方法,下面是详细解释:
readlines()方法
特点:一次性读取整个文件;自动将文件内容分析成一个行的列表
readlines()读取所有行,然后把它们作为一个字符串列表返回。
示例:
要读取的文档内容:
通过readlines()方法读取并输出:
==拓展:==
Python3中,读取文件还有另外两种方法:read()、readline()
read()方法:
**特点:**读取整个文件,将文件内容放到一个字符串变量中。
**缺点:**如果文件非常大,尤其是大于内存时,无法使用read()方法。
示例:
还是读取上面示例文档
通过read()方法读取并输出:
readline()方法:
特点:readline()方法每次读取一行;返回的是一个字符串对象,保持当前行的内存
缺点:一次只读一行,比readlines慢的多
示例:
还是读取上面示例文档
通过readline()方法读取并输出:
第5~7行
if i.split(): # i不是空行
i = i.strip() # 把单词两边空格删除
w.append(i) # 单词空格删除后,存入w
在循环遍历中,判断每一行是不是非空行,如果是非空行,把这行单词两边空格删除,并存入数组w
此处涉及三个方法:split(),strip(),append(),下面详细解释:
split()方法:
**具体作用:**拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
==此处仅用作判断是否非空行,如果是非空行,返回值1,继续运行if内部语句==
strip()方法:
**具体作用:**拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
==此处用来将第i行单词两边的空格删除==
append()方法:
方法append(obj),其中的参数obj为添加到列表末尾的对象
**具体作用:**用于在列表末尾添加一个元素
==此处用来将第i行单词添加到列表w的末尾==
第8~9行
for i in w: # 遍历w
y.append(len(i)) # 将w中单词的长度存入y
循环遍历列表w,将列表w中各个单词的长度存入列表y
此处涉及两个方法:append(),len(),下面详细解释:
append()方法前面说过,此处不再赘述
len()方法:
**作用:**返回字符串、列表、字典、元组等长度
**语法:**len(str)
**参数:**str(要计算的字符串、列表、字典、元组等)
**返回值:**字符串、列表、字典、元组等元素的长度
==此处用来计算列表w中第i个单词的长度==
第10行
m = max(y) # 找出长度最大值
找出列表y中长度最大值,并返回给变量m
此处涉及一个max()方法,下面详细解释:
max()方法:
**主要作用:**返回传入参数中的最大值
==此处用来找出列表y中各个单词长度的最大值==
第11~13行
for j in w: # 遍历w
if len(j) == m: # 找到w中长度为最大值m的单词
print(j, ":", m) # 输出这个单词和长度
循环遍历列表w,进行一个判断,找出列表w中单词长度为上面找出的最大值m的单词,输出这个单词和长度
此处涉及两个方法:len(),print(),下面详细解释:
len()方法上面已经说过,此处不再赘述
print()方法:
**主要作用:**打印输出字符串
==此处用来在控制台输出所找到的单词以及它的长度==
到此,该题大致完成
下面是部分Python基础语法:
for … in …
**说明:**也是循环结构的一种,经常用于遍历字符串、列表,元组,字典等
格式:
for x in y:
[循环体]
**执行流程:**x依次表示y中的一个元素,遍历完所有元素循环结束。
例1:遍历字符串
s = 'I love you more than i can say'
for i in s:
print(i)
例2:遍历列表
l = ['鹅鹅鹅', '曲项向天歌', '锄禾日当午', '春种一粒粟']
for i in l:
print(i)
# 可以获取下表,enumerate每次循环可以得到下表及元素
for i, v in enumerate(l):
print(i, v)
例3:遍历字典
d.get(key))
# for key, value in d.items():
# 上下两种方式等价 d.items() <=> dict.items(d)
for key, value in dict.items(d):
print(key, value)