读取文件找到长度最大的单词

题目:程序根目录下的 word.txt 文件中保存有n个单词,每个单词一行。请使用Python编写一个一个程序,读取words.txt文件,统计长度最大的单词输出到控制台

输出结果如下:

1
sophisticated:13

程序示例:

1
2
3
4
5
6
7
8
9
10
11
12
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行:

1
w = []  # 存放文件中读出并经过处理的单词

​ 定义一个列表,这里列表w用来存放从文件中读出并经过处理(去除单词两侧空格)的单词

第2行

1
y = []  # 存放w中每个单词的长度

​ 定义一个列表,这里列表y用来存放上面数组w中各个单词的长度

第3行

1
2
with open('words.txt', 'r') as fp:  # 以只读的方式打开word.txt
[代码块] # 这里代码块后面解释

​ 使用 ’r’(只读模式)打开存在程序目录下的 ‘words.txt’ 文件,并给其指定变量==fp==

​ 此处涉及一个with as语句和open()方法,下面是详细解释:

with as语句:

​ with as 语句的基本语法格式为:

1
2
with 表达式 [as target]:
代码块

​ 此格式中,用 [] 括起来的部分可以使用,也可以省略。其中,target 参数用于指定一个变量,该语句会将 expression 指定的结果保存到该变量中。with as 语句中的代码块如果不想执行任何语句,可以直接使用 pass 语句代替。

​ 通过使用with as 语句,==即便最终没有关闭文件,修改文件内容的操作也能成功==。

open()方法有两个参数:

​ open(‘参数1’,’参数2’)

​ 参数1为要创建或打开文件的文件名称,该名称要用引号(单引号或双引号都可以)括起来。需要注意的是,如果要打开的文件和当前执行的代码文件位于同一目录,则直接写文件名即可;否则,此参数需要指定打开文件所在的完整路径。

​ 参数2为用于指定文件的打开模式。可选的==部分==打开模式如下表 所示。如果不写,则默认以只读(r)模式打开文件。

模式含义注意事项
r只读模式打开文件,读文件内容的指针会放在文件的开头。操作的文件必须存在。
w以只写模式打开文件,若该文件存在,打开时会清空文件中原有的内容。操作的文件必须存在。
a以追加模式打开一个文件,对文件只有写入权限,如果文件已经存在,文件指针将放在文件的末尾(即新写入内容会位于已有内容之后);反之,则会创建新文件。/

第4行

1
for i in fp.readlines():  # 遍历文件每一行

​ 循环遍历文件每一行

​ 此处涉及一个readlines()方法,下面是详细解释:

readlines()方法

​ 特点:一次性读取整个文件;自动将文件内容分析成一个行的列表

​ readlines()读取所有行,然后把它们作为一个字符串列表返回。

示例:

​ 要读取的文档内容:

​ 通过readlines()方法读取并输出:

​ ==拓展:==

​ Python3中,读取文件还有另外两种方法:read()、readline()

read()方法:

特点:读取整个文件,将文件内容放到一个字符串变量中。

缺点:如果文件非常大,尤其是大于内存时,无法使用read()方法。

示例:

​ 还是读取上面示例文档

​ 通过read()方法读取并输出:

readline()方法:

​ 特点:readline()方法每次读取一行;返回的是一个字符串对象,保持当前行的内存

​ 缺点:一次只读一行,比readlines慢的多

示例:

​ 还是读取上面示例文档

​ 通过readline()方法读取并输出:

第5~7行

1
2
3
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行

1
2
for i in w:  # 遍历w
y.append(len(i)) # 将w中单词的长度存入y

循环遍历列表w,将列表w中各个单词的长度存入列表y

此处涉及两个方法:append(),len(),下面详细解释:

append()方法前面说过,此处不再赘述

len()方法:

作用:返回字符串、列表、字典、元组等长度

语法:len(str)

参数:str(要计算的字符串、列表、字典、元组等)

返回值:字符串、列表、字典、元组等元素的长度

​ ==此处用来计算列表w中第i个单词的长度==

第10行

1
m = max(y)  # 找出长度最大值

找出列表y中长度最大值,并返回给变量m

此处涉及一个max()方法,下面详细解释:

max()方法:

主要作用:返回传入参数中的最大值

​ ==此处用来找出列表y中各个单词长度的最大值==

第11~13行

1
2
3
for j in w:  # 遍历w
if len(j) == m: # 找到w中长度为最大值m的单词
print(j, ":", m) # 输出这个单词和长度

循环遍历列表w,进行一个判断,找出列表w中单词长度为上面找出的最大值m的单词,输出这个单词和长度

此处涉及两个方法:len(),print(),下面详细解释:

len()方法上面已经说过,此处不再赘述

print()方法:

主要作用:打印输出字符串

​ ==此处用来在控制台输出所找到的单词以及它的长度==

到此,该题大致完成

下面是部分Python基础语法:

for … in …

说明:也是循环结构的一种,经常用于遍历字符串、列表,元组,字典等

格式:

1
2
for x in y:
[循环体]

执行流程:x依次表示y中的一个元素,遍历完所有元素循环结束。

例1:遍历字符串

1
2
3
s = 'I love you more than i can say'
for i in s:
print(i)

例2:遍历列表

1
2
3
4
5
6
l = ['鹅鹅鹅', '曲项向天歌', '锄禾日当午', '春种一粒粟']
for i in l:
print(i)
# 可以获取下表,enumerate每次循环可以得到下表及元素
for i, v in enumerate(l):
print(i, v)

例3:遍历字典

1
2
3
4
5
6
7
8
d = {'a':'apple', 'b':'banana', 'c':'car', 'd': 'desk'}
for key in d:
# 遍历字典时遍历的是键
print(key, d.get(key))
# for key, value in d.items():
# 上下两种方式等价 d.items() <=> dict.items(d)
for key, value in dict.items(d):
print(key, value)
                                                              致--小呆呆~