读写文件

两种路径的介绍

绝对路径:总是从根文件夹开始
相对路径:相对程序的当前工作目录

文件读取

读取步骤:
 1、调用open()函数,返回一个File对象
 2、调用File对象的read()write()方法。
 3、调用File对象的close()函数,关闭文件。

open()函数打开文件

在使用open()函数打开文件时,需要向函数中传递一个字符串路径,可以是相对路径,也可以是绝对路径。但open()函数返回的是一个File对象。

1
files = open('E:\\hello.txt')

此方法默认是以模式打开文件的,也就是python只让从文件中读取文本而不能以其他方式修改它。

读取文件内容

上面介绍了关于打开文件的方法,就是使用open()函数,但是要读取文件里的内容就要使用File对象的read()方法。

1
2
3
4
files = open('E:\\hello.txt')
hello_content = files.read()
print(type(hello_content))
print(hello_content)

输出内容

1
2
3
4
5
6
7
8
[Running] python -u "e:\vscode_py\.vscode\hello.py"
<class 'str'>
nihao
welcome to my world
nice to meet you
i all alone beweep my outcast state.

[Done] exited with code=0 in 0.144 seconds

很明显,我们看到此时读取的内容为字符串。另一种读取方法是readlines(),它从文件中取得一个字符串的列表,此时列表中的每一个字符串就是文本中的一行,两者对比如下。

1
2
3
4
files = open('E:\\hello.txt')
hello_content = files.readlines()
print(type(hello_content))
print(hello_content)

读取结果如下:

1
2
3
4
5
[Running] python -u "e:\vscode_py\.vscode\hello.py"
<class 'list'>
['nihao \n', 'welcome to my world\n', 'nice to meet you\n', 'i all alone beweep my outcast state.']

[Done] exited with code=0 in 0.138 seconds

此时,返回的对象类型为list(列表),字符串列表。

写文件

以读模式打开文件,则不能进行修改(写)等操作;此时需要用写模式或添加文本模式来打开文件,但写模式将会覆盖原有的内容,从头开始,将w作为第二个参数传给open();添加模式是在原文件的末尾添加内容,将a作为第二个参数传递给open(),以添加模式打开文件。

1
2
3
4
files = open('E:\\hello.txt','a')
hello_content = files.write('\nThis is text that you input\n')
# print(type(hello_content))
print(hello_content)

然后在读取文件

1
2
3
files = open('E:\\hello.txt')
hello_content = files.read()
print(hello_content)

输出结果如下:

1
2
3
4
5
6
7
8
9
10
[Running] python -u "e:\vscode_py\.vscode\hello.py"
nihao
welcome to my world
nice to meet you
i all alone beweep my outcast state.

This is text that you input


[Done] exited with code=0 in 0.131 seconds

shelve模块保存变量

用该模块能够将代码中的变量保存到二进制的shelf文件中。

1
import shelveshelfFile = shelve.open('mydata')cats = ['dog', 'pig', 'Simon']shelfFile['dog'] = catsshelfFile.close()

运行后会生成mydata.bak、mydata.dat、mydata.dir等文件。

屏幕截图 2021-09-15 230115.jpg
屏幕截图 2021-09-15 230115.jpg

与正常文本操作方式不同,不用考虑是读模式还是写模式。

1
2
3
4
import shelve
shelfFile = shelve.open('mydata')
print(type(shelfFile))
print(shelfFile['dog'])

输出结果为

1
2
3
4
5
[Running] python -u "e:\vscode_py\.vscode\hello.py"
<class 'shelve.DbfilenameShelf'>
['dog', 'pig', 'Simon']

[Done] exited with code=0 in 0.151 seconds