携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情
大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN C/C++领域新星创作者blog.csdn.net/chuxinchang…
- 掘金LV3用户 juejin.cn/user/138142…
- 阿里云社区专家博主,星级博主,技术博主 developer.aliyun.com/profile/exp…
- 华为云云享专家 bbs.huaweicloud.com/community/m…
文件操作
- 使用内建函数 open打开一个文件
handle = open(file_name,access_mode = 'r')
-
file_name是文件的名字. 可以是一个绝对路径, 也可以是相对路径.
-
handle = open('test.txt',access_mode = 'r') #相对路径 handle = open('Z:\test.txt',access_mode = 'r') #绝对路径
-
-
access_mode是文件的打开方式. 选项有以下几种
-
'r' : 只读 'w' : 只写 'a' : 追加写 't' : 按文本方式读写 'b' : 按二进制方式读写
例如:写文件
f = open("...","W") f.write('写入的内容') -
-
handle是一个文件句柄, 是一个可迭代的对象. 可以直接使用for循环按行读取文件内容.
for line in handle:
print(line)
- handle使用完毕, 需要close掉. 否则会引起资源泄露 (一个进程能打开的句柄数目是有限的)
handle.close()
例子: 统计文本中的词频
一个文本文件中, 每一行是一个单词. 可能有重复. 统计每个单词出现的次数.
in 和 not in 是关键字查找
Bug代码1:
handle = open('test.txt',mode = 'r') #以只读方式,打开Z盘下的test.txt文件
words = {} #创建空字典
#读取
for word in handle:
word = word[:-1] #切片,去掉最后的换行符\n
#如果当前行的单词不在字典中,就插入新键值对 否则次数+1
if word not in words:
words[word] = 1
else:
words[word] +=1
handle.close()
print(words)
切片的时候出了问题,所以我们换一种方式: 使用字符串的
strip函数 :去掉字符串两侧的空白字符
handle = open('test.txt',mode = 'r') #以只读方式,打开Z盘下的test.txt文件
words = {} #创建空字典
#读取
for word in handle:
word =word.strip()#去掉字符串两侧的空白字符
#如果当前行的单词不在字典中,就插入新键值对 否则次数+1
if word not in words:
words[word] = 1
else:
words[word] +=1
handle.close()
print(words)
模块
当我们一个项目的代码量较大的时候, 需要把代码放到多个不同的.py文件中. 起到了命名空间的效果
- 可以通过 import 关键字, 引用其他.py文件中的代码.
- 被引入的这个代码文件, 就称之为 "模块".
- 被引入的文件, 去掉.py后缀名, 就是模块名.
例子:
add.py的内容:
def Add(x,y):
return x+y
test.py的内容,直接import模块名 不需要加后缀.py
#方式1:导入模块
import add #导入add文件
print(add.Add(1,2)); #打印3 要利用模块进行调用里面的函数
#方式2:导入模块中的函数,直接调用
from add import Add #导入add模块中的Add函数
print(Add(1,2))#打印3 直接调用Add函数
#还可以import 模块名 然后给模块名取别名
import add
a = add
print(a.Add(1,2))#打印3
运用模块的好处
运用模块,在不同文件命名一样名字的函数,就不会导致覆盖
模块查找顺序
一个模块想要被正确导入,必须放到合适的目录下
- 一个是当前目录,一个是系统目录(python解释器安装目录)
模块查找的顺序, 先是查找当前目录, 然后查找Python的安装目录.
常用函数
\