10.文件与文件系统
1.打开中文字符的文档时,会出现乱码,Python自带的打开文件是否可以指定文字编码?还是只能用相关函数?
用open(path, ‘r’, encoding = ‘utf-8’) 打开文件就可以。中文字符默认是用gbk编码方式来读取,所以会报错
2.编写程序查找最长的单词
输入文档: res/test.txt
题目说明:
"""
Input file
test.txt
Output file
['general-purpose,', 'object-oriented,']
"""
def longest_word(filename):
with open(filename, 'r', encoding = 'utf-8') as f:
data = f.read().strip().split('\n')
data1 = ' '.join(data).split(' ')
data1.sort(key = lambda x:len(x))
longest = [i for i in data1 if len(i) == len(data1[-1])]
return longest
In [74]: longest_word('test.txt')
Out[74]: ['general-purpose,', 'object-oriented,']
1、首先需要读取文件。函数的输入参数里给了文件名,在函数里使用with的结构去打开并读取文件。由于这里的字符比较混乱,我使用了两层处理。
第一:读取全部数据,用strip()去除头尾的字符,再用split(’\n’)切割每一段。不用readlines()是因为它读取的结果里还是包含了’\n’.
第二,用’ ‘.join 的方法重新组合字符串,再进行split(’ '), 按照空格来切割,得到单个字符。
2、找最长的字符串。首先想到的就是排序。但是这里要按照字符串的长度来排序。为了达到这个目的,使用key和lambda函数
data1.sort(key = lambda x:len(x))
key 里返回字符串的len(),排序结果就是这样
3、由于最长的字符串可能不止一个。因此还要判断一下到底有几个是最长的。这里用一个列表推导式来做,加上判断,如果长度和最长的那个一样就保留下来。