文件的操作

假设下列文件存放在D:盘,命名为subject.txt

Chinese
Mathematics
English
Chemistry
Physics

打开文件

函数open("filepath/filename","mode",encoding="utf-8")

"""
以只读模式打开文件,文件存储在windows系统中
"""
f = open("d:\\subject.txt","r",encoding="utf-8")
f.close()

假如,文件存储在Linux或者MacOS系统中,正确的代码为

"""
以只读模式打开文件,文件存储在windows系统中
"""
f = open("/path/subject.txt","r",encoding="utf-8")
f.close()

with关键字打开,不需要调用close()方法,但是打开之后,操作文件的语句要缩进

with open("d://score2.csv", 'r', encoding="utf-8") as f:
    print(f.readlines())

模式

模式解释
r只读文件
w写入文件
a追加文件
+和上三种配合使用,让打开的文件可读可写

只读

read()

  • 当不输入参数时,读取文件内所有内容;
  • 当输入参数时,如read(10),从第一个字节开始,读取后面10个字符。
f = open("/path/subject.txt","r",encoding="utf-8")
print(f.read())
f.close()
"""
输出结果为:
Chinese
Mathematics
English
Chemistry
Physics

"""
f = open("/path/subject.txt","r",encoding="utf-8")
print(f.read(10))
f.close()
"""
输出结果为:
Chinese
Ma

在Chinese后有一个换行符,也是字符。
"""

readline()

  • 当不输入参数时,读取数据直到遇到换行或者EOF;
  • 当输入参数时,如readline(10),从第一个字节开始,读取后面10个字符,但是遇到换行或者EOF立即停止。
f = open("/path/subject.txt","r",encoding="utf-8")
print(f.readline())
f.close()
"""
输出结果为:
Chinese

在Chinese后有一个换行符,并且print以换行结束,所以有一空行。
"""
f = open("/path/subject.txt","r",encoding="utf-8")
print(f.readline(5))
print(f.readline())
f.close()
"""
输出结果为:
Chine
se

"""

readlines()

  • 没有参数,以文件每一行为元素(包括换行符),返回一个列表。
f = open("/path/subject.txt","r",encoding="utf-8")
print(f.readlines())
f.close()
"""
输出结果为:
['Chinese\n','Mathematics\n','English\n','Chemistry\n','Physics\n']

"""

写入

要写入文件,需要用w或者a两种模式打开文件。两者的区别为:

  • w是先清除文件所有内容再写入,清除文件的操作在打开时完成;
  • a是在文件现有内容后追加新的内容,打开文件时,游标被移动到最近。

写入的函数是write()

"""
以写入的模式打开文件
"""
f = open("/path/subject.txt",'w',encoding="utf-8")
f.write("Biology\n")
f.write("History\n")
f.close()
"""
以追加的模式打开文件
"""
f = open("/path/subject.txt",'a',encoding="utf-8")
f.write("Biology\n")
f.write("History\n")
f.close()

可读可写

可读可写模式的实现可以将rwa三种模式后加上一个+,即r+w+a+,三者区别:

  • r+:打开文件时,游标在文件开头,但是原本内容还在
  • w+:打开文件时,游标在文件开头,原本内容已经被清除
  • a+:打开文件时,游标在文件最后,且原本内容还在
f = open("/path/subject.txt","r+",encoding="utf-8")
f.write("Geography")
print(f.read())
f.close()
"""
输出结果为:

"""

当写入之后,游标的位置位于刚刚写入内容的后面,所以不能读出刚刚写入的内容。 如果要解决这个问题,需要用到seek(0)函数; seek(0)函数的功能是,将游标移动到指定位置,0即最起始位置。

所以上述代码只需要多加一行,就能读取出写入之后的文件内所有内容,请自行完成代码。