一,
r :读取模式(默认值)
w:写入模式
x:独占写入模式
a:附加模式
b:二进制模式
t:文本模式(默认值,与其他模式结合使用)
+:读写模式(与其他模式结合使用)
r+: 打开文件进行读写,会覆盖文件原内容,重新写入;若文件不存在,则会报错
w+:打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
1,文件打开:
使用open()函数打开一个文件,具体步骤如下:
进入python模式:定义环境变量f 设置 f = open('text_datetime2.py')
mode='r':是文件的模式只读方式打开 encoding= 'cp936' 是以此种编码方式打开 (指定编码方式)
可通过help(open)方式打开:会显示出一些帮助的文档 如下图:
dir(f):可以看到很多方法:
2,文件关闭:
使用close()函数关闭文件
f.close() 可以关掉文件 注意:需要做异常处理
避免只记得打开文件,忘记关闭文件的问题以下介绍新的写法:
with语法(上下文的管理器,在文打开的时候会把上下文记住,用完后会自动回收掉)
写法:with open("text_datetime2.py") as f:do_something(f)
到达该语句末尾时,将自动关闭文件,几遍出现异常亦如此
二,文件的读取:
read()读取文件:可以指定参数,表示读几个字符(字节)
readline()读取一行数据,可以指定参数,表示读前几个字符(字节)
readlines()读取所有行,返回列表;
代码如下:
def read_file():
file_name = "test"
file_path = "E:\\pythonProject\\test" #window下用\\这种斜杠
file_path2 = "E:/pythonProject/test" # mac linux下通用
f = open(file_name,encoding='utf-8')
"""全部读取"""
res = f.read()
print(res)
"""读取指定字符"""
res1 = f.read(10)
print(res1)
#在进行读取10个字符,接着res1读取的字符的位置继续往后读
res2 = f.read(10)
print(res2)
"""随机读取字符"""
#跳过20个字符,在读取5个字符(此时报错,可能因为中文的编码和英文的编码有些不一致,
# 可能一个汉字占了两个字节,把文件内容改成英文的就可以正常执行。中文要慎用随机读取)
f.seek(10)
print(f.read(5))
"""按行读取"""
res3 = f.readline()
print(res3)
print(f.readline(4))#指定读取行数
"""读取所有行"""
res4 = f.readlines()
print(res4)
f.close()
if __name__ == '__main__':
read_file()
三,文件的写入:
1,使用wirte()函数向打开的文件对象写入内容:
代码如下,最好放在编辑器里运行一下:
运行结果 会自动新建一个wirte_text的文件,里面会出现写入的 hello world
def write_file():
file_name = "write_text"
#以写入的方式打开文件
f = open(file_name,'w')
#写入一行内容
f.write('hello')
#换行
f.write('\n')
#在写入一行内容
f.write('world')
#关闭文件
f.close()
if __name__ == '__main__':
write_file()
2,使用writelines()函数向打开的文件写入多行内容
def write_multi_line():
"""向文件中写入多行内容"""
file_name = "write_line.text"
with open(file_name,'w',encoding='UTF-8') as f:
c = ['第一行','\n','第二行','第三行']
f.writelines(c)
示例:记录用户日志,以 a 的方式进行打开
import random
from datetime import datetime
def write_user_log():
#记录用户时间 + 记录用户的ID
rest = "用户:{0} - 访问时间{1}".format(random.randint(100,9000),datetime.now())
file_name = "write_user_log.text"
with open(file_name,'a',encoding='UTF-8') as f:
f.write(rest)
f.write('\n')
3,如果既要读取文件,又要写入文件:代码如下
先读 在写入 用 r+ 的 可读可写模式
def read_and_write():
file_name = "read_write.text"
with open(file_name,'r+',encoding="UTF-8") as f:
read_rest = f.read()
#如果没有1,写入 哈哈哈
#如果有1,写入 嘻嘻嘻
if '1' in read_rest:
f.write('嘻嘻嘻')
else:
f.write('哈哈哈')
f.write('\n')