我们可以利用python对本电脑文件夹里的文件进行处理,python中提供了一系列相关的方法和函数供我们使用。
读取文件
我们现在在本python文件中有一个txt文件名为Lego,那么我们就可以利用python打开该文件
with open('Lego.txt') as file_text:
contents = file_text.read()
print(contents)
解释与说明:
- 代码第1行,open()函数的作用是打开某个文件。有open()函数自然也有close()函数。在python中每打开一个文件都有在使用结束后关闭一个文件。但是由于上面代码中使用了with关键字,则不需要访问文件后人为将其关闭,python会自动将其关闭。
- 代码第2行,read()函数的作用是读取文本内容并将其赋给contents变量进行接收。
- 代码第3行,将读取的内容打印出来。注意这样写最后打印的内容会增加空一行,这是因为会多读一个空字符串。想要删去这个空格的一行可以改成
print(contents.rstrip())
,这样可以删去多余的空隔行。
文件路径
**绝对路径:**文件的完整路径。比如:D:\datasets\coco128\images\train2017
**相对路径:**相对于某个文件夹下的路径。比如:现在我有一个文件所在的路径是D:\datasets\coco128
,有另外一个路径是D:\datasets\coco128\images\train2017
,那么相对路径就是images\train2017
注意:windows系统使用反斜杠( \ )而不是( / ),但是在python中依然可以使用( / )作为路径表示,也有的版本是( // )
上面的读取文件的代码中,使用的就是相对路径。其直接使用文件格式“Lego.txt”即默认在python运行文件所在目录下搜索另外一个文件。如果文件路径过长且需要重复使用,那么我们可以用一个变量来暂存它:
file = 'D:\datasets\coco128\images\train2017\Lego.txt'
with open(file) as file_text:
contents = file_text.read()
print(contents)
逐行读取
file = 'D:\datasets\coco128\images\train2017\Lego.txt'
with open(file) as file_text:
for lines in file_text:
print(lines)
通过一个for循环我们就可以打印出每一行的内容。
我们再进一步,如果我们想打印出每个字符呢?
file = 'D:\datasets\coco128\images\train2017\Lego.txt'
with open(file) as file_text:
for lines in file_text:
print(lines)
for words in lines:
print(words)
我们只需要再嵌套一层即可。通过这两个例子,我们可以理解文件的存取模式:即由字符组成一行行字符串,再由一行行字符串组成一篇文档。
理解了这一点之后,其实我们就可以文件分成各行存入一个列表中。
file = 'D:\datasets\coco128\images\train2017\Lego.txt'
with open(file) as file_text:
lines = file_text.readlines()
for line in lines:
print(line.rstrip())
这样也可以打印出文档各行。
但是上述做法不能很好的帮我们分离文档中有多少个单词(英文),只能统计有多少个字符。我们可以使用split()函数将单词分离开来:
file = 'D:\datasets\coco128\images\train2017\Lego.txt'
with open(file) as file_text:
contents = file_text.read()
words = contents.split()
num = len(words)
使用len()就可以统计出文档中单词的个数了。
写入文件
file = 'D:\datasets\coco128\images\train2017\Lego.txt'
with open(file, 'w') as file_text:
file_text.write("I don't know what to write.\n")
file_text.write("I don't know what to write so I write again.\n")
解释与说明:
- 注意这里的open()函数多加了一个参数’w’,‘w’的意思是“写”,表示对文件需要进行写操作。其实在之前的读取文件中也可以传入参数’r’,但是不传就默认是对文件只读不写。补充一些其它的参数:'r’读取模式,'w’写入模式,'a’附加模式,'r+'读写模式。
注意:python只能写入字符串,如果想要传入数值,必须先将其转换成字符串模式。
写入模式和附加模式的区别:
- 写入模式是将文件中原来的内容全部清除,按指令重新写入内容。
- 附加模式是将保留文件中原来的内容,在文件文档的后面继续写入内容。
存储数据
很多程序都要求用户输入某种信息,比如用户名等等。而这些信息即使在程序关掉后也需要保存下来,所以我们需要一个能永久存储数据的容器,这个容器就是json文件。
json,全称JavaScript Object Notation,从名字就可以看出,其最初是由JavaScript开发的,但随后成为了一种常见形式,被众多语言所采用。也就是说,用json存储数据不仅能在python中使用,而且还能够在其它语言中使用。
下面我们来看下如何使用json文件存储数据。
json.dump()
json.dump()用于存储数据。
import json
numbers = [1,2,3,4,5,6]
with open('Lego.json','w') as lego:
json.dump(numbers,lego)
numbers是存储的数据内容,lego是存储的文件对象
json.load()
json.load()用于存储数据。
import json
with open('Lego.json') as lego:
num = json.load(lego)
print(num)