Python学习笔记 —— 文件操作
![作者头像](https://ask.qcloudimg.com/avatar/male/HJMIh2-Hum.png)
今天来介绍一下Python的文件操作,后面的五六七我只是比较浅显的介绍了一下,前面四节的内容才是我们主要掌握的
目录
一、输入一行数据,并保存到文件word中(.doc)
将数据保存到文件,前面讲过内建函数,但是没有说过“Open” 函数,这是Python中用于访问文件的函数,我们需要做的就是指定一个文件名以及打开文件的方式,先看下面这段代码
myfile =open("Hello.doc","w") #将数据写入保存文件,这里我们定义将数据保存到word中
#当然也可以将文件保存到文本txt中,我们只需把文件名后缀改成txt即可
myfile.write("hello world!") #将指定的数据保存到文件
myfile.close()#保存并关闭文件夹
写完这段代码后点击运行,然后系统就生成了一个 word 文档,我们打开也可以看到里面的内容
![](https://ask.qcloudimg.com/http-save/yehe-5969132/82504227c5b48c13ba0ce8395df33cb3.png)
这里我的命令是打开一个名为 hello.doc 的word文档,如果没有这个文件,系统就会创建一个名为 hello.doc 的word并把内容存入里面,我们将其保存在 myfile 中,myfile 的名称可以是任意的,我们可以将myfile 看为引用已打开文件的一种特殊方法 我们用wirite 来写入我们需要保存的数据存在括号和引号当中 然后到了最重要的yi一步,也就是close 关闭并保存文件
PS:还有一点,这个程序运行完毕后会并不会输出任何数据到屏幕
还有一点,在第一行代码中
![](https://ask.qcloudimg.com/http-save/yehe-5969132/c2e4470ca8db32c4d2aa7acc92bd188c.png)
,它有三种形式,分别是 “r” 表示读取数据,“w”表示写入数据(如果文件已存在,则覆盖原文件),“a” 和前面的元组,列表一样(代表append),在现有文件的末尾加入附属数据
二、在文件中输入多条内容,并保存到txt中(.txt)
myfile = open("my_txt.txt","w")
myfile.write("大家好,我叫Gorit\n")
myfile.write("今天是晴天\n")
myfile.write("起个大早背背单词其实挺好的")
myfile.close()
三、用with open 的方法打开文件,并写入数据
with open("hello.txt","w") as myfile:#我们只使用myfile这个文件
myfile.write("Hello world!\n")
myfile.write("I love coding!\n")
print("Programing ending!")
这个程序多了 with 和 as myfile 这两个代码块,后面写入数据用缩进来表示,缩进结束后,文件写入完毕,所以在执行 print 函数之前就完成了写入的工作,然后我们就不能访问 myfile 中的内容 这里我们用了 一种特殊方法打开文件,所以不需要手动关闭它 如果我们要在一个文件后面添加内容,只需把第一行代码 中的 “w” 改为 “a”
四、读取文本和二进制文件
前面介绍到三种文件的操作,我们现在要读取文件,需要用到 “r” 表示只读,我们先看这段 代码
try:
myfile = open("hello.docx","r")
print("file opended")
except OSError as err:
print("file couldn't find")
print(err)
信息量有点大,是不是,这个代码我故意写错了一点点地方,我们先看 运行结果
![](https://ask.qcloudimg.com/http-save/yehe-5969132/f1e53b885e49eb0f00b3a134645d4def.png)
这里的 try 和 except 可以类似的理解为 if else的一种 操作,这个程序返回的结果告诉我,我没有 创建过 “hello.docx”, 应用 try,except 可以让我们优雅的处理文件操作的异常,下面我将文件名改成正确的试试看
![](https://ask.qcloudimg.com/http-save/yehe-5969132/ae48628025675d168a342b87d4f47a62.png)
有了try except就可以处理文件异常(比如文件丢失),但是讲了这么多,我还是没有讲文本的读取
接下来我们就讲讲文件内容的读取
文件内容具体是什么无关紧要,我们在前面的程序 稍加改进一下
myfile = open("hello.doc","w")
myfile.write("counting stars@!\nsofia!")
myfile.close()
myfile = open("hello.doc","r")
for my_line in myfile:
print(my_line,end=" ")#end = " " 代表不添加换行符
myfile.close()
except OSError as err:
print("file couldn't find")
print(err)
为了程序显示的更加直观,我把原来写的 hello world 覆盖了,重新添加了两句话,我们用for 循环读取了word中的 每一行内容,并将其打印在屏幕上,但是如果文本的内容比较多,我们想要一次打印所有内容又该怎么做呢?
一次打印多行文本
file = open("more_line text.txt","w")
file.write("How to study programing\n")
file.write("First,execise more\n")
file.write("Then,ask more questions to yourself!\n")
file.write("Coding online")
print("File found")
text_data = open("more_line text.txt").read()#readlines 读取整行数据,可以用for来遍历,打印数据的时候去除换行符记得用end = " "
print(text_data)
except OSError as err:
print("File couldn't find")
print(err)
五、处理结构化数据
前面所讲到的文件的操作基本可以处理简单的纯文本。 但是我们生活中的数据仅以纯文本的形式存储时远远不够的。 以备受推崇的逗号分隔值(CSV)格式为例,这种格式常用在不同的电子表格程序之间交换数据。在CSV文件中,每行就像 电子表格那样,每列由逗号分隔开
下面我们就用Python创建一个简单文本文件,命名为 text.txt
text = open("text.txt","w")
text.write("Mike, 1234\n")
text.write("Bob, 4567\n")
text.write("Gorit, 2538")
text.close()
这是一个简单的CSV文件,我们希望程序能够处理它,游览每一行,然后把名字和号码分开存储,这个 时候我们就可以从逗号位置进行分割, 这将得到一个 列表,然后我们在用列表填充字典,具体程序看下面的代码(前提你的编码是utf - 8 形式)
employees = {} #创建一个空白字典
myfile = open("text.txt","r")
for text_line in myfile:
mylist =text_line.split(",") #从该行的逗号分隔项目中创建列表
employees[mylist[0]] = int(mylist[1].rstrip()) #添加项目(名字和号码)到项目中
#rstrip 删除多余的换行
myfile.close()
print(employees)
except OSError as err:
print("File not found:")
print(err)
六、查找文件中我们需要的元素
比如,给你一篇文章,我让你去计算某一个特定词语出现的次数的时候,你可以用下面这个方法
这是一个我之前创建好的一个 txt 文件
![](https://ask.qcloudimg.com/http-save/yehe-5969132/26b9a92b5973e145abe2f384ef9cef8c.png)
我的任务是查找 “exercise” 这个单词的位置,我们可以用循环遍历这个文件中每一行的内容,我们对文件进行只读操作
#将数据读入一个行列表
text_list = open("more_line text.txt","r").readlines()
#读取每一行 counter 的值加一,line记录读取得数据
for counter,line in enumerate(text_list):
#在该行中搜索“exercise”,返回它所在行的位置,没有则返回-1
loc = line.find("exercise")
#如果不为-1,则表明已经找到字符串
if loc != -1:
print("Found on line",counter+1,"postion",loc)
七、Python中数据的处理
从上面的程序,我们得知Python 的CSV 格式存储, 当你需要处理文本和数字的时候,可将这段代码用于程序中,但是分解数据并组成我们 希望的格式的时候却有些小麻烦 Python中可以 导入 import pickle 的方式来处理数据,但是这处理的 数据只能是二进制的,是我们 肉眼看不懂的,计算机理解的一种进制,这个就不做介绍了 还可以尝试用JSON—— JavaScript 对象标记, JSON是一种可读的纯文本形式,下面我就以下面的一个简单的实例简要介绍一下JSON 关于JSON的 介绍——维基百科