一,
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')