文件的操作
假设下列文件存放在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()
可读可写
可读可写模式的实现可以将r
、w
、a
三种模式后加上一个+
,即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
即最起始位置。
所以上述代码只需要多加一行,就能读取出写入之后的文件内所有内容,请自行完成代码。