

建一个txt文件,命名为data.txt内容如下:
Hello, my name is Jack.I'm 25 years old.另新建一个read_file.py文件,并将data.txt与read_file.py文件置于同一目录下

开始使用代码读取data.txt中的内容
with open('data.txt') as file_txt: contents = file_txt.read() print(contents)输出:
Hello, my name is Jack.
I'm 25 years old.
open方法会打开一个文件,并返回一个文件对象(file对象)
as将返回的file对象重新命名,方便用
file.read()表示读取文件中内容
在读取文件的时候,需要对文件进行打开操作,在操作完毕后,必需将文件关闭,否则该文件会一直被占使用,opne()可以打开文件,close()则将文件关闭;但是假如程序有报错等问题,代码会无法执行到close()语句上;with关键字表示在访问文件一旦不再被访问,则将文件关闭,这样避免了不记得关闭或者未正常关闭的风险
open()参数
file object = open(file_name [, access_mode][, buffering])file_name是文件名,假如与代码文件在同一目录,则只提供文件名就可,假如不在同一目录下,则需要按相对路径或者绝对路径的方式传入文件的地址
绝对路径就是文件的真正存在的路径,是指从硬盘的根目录(盘符)开始,进行一级级目录指向文件
相对路径就是以当前文件为基准进行一级级目录指向被引使用的资源文件
../ 表示当前文件所在的目录的上一级目录
./ 表示当前文件所在的目录(可以省略)
/ 表示当前站点的根目录(域名映射的硬盘目录)
例如,data.txt的地址在C:\Users\Administrator\Desktop\code\data目录下,read_file.py文件在C:\Users\Administrator\Desktop\code\code目录下

# 相对路径 file1 = open('../data/data.txt')# 等同于 file1 = open('..\\data\\data.txt')print(file1.read())file1.close()# 绝对路径 file2 = open(r'C:\Users\Administrator\Desktop\code\data\data.txt')print(file2.read())file2.close()注意,windows平台下,表示路径层级关系时使用反斜杠\,而\又表示转译的意思,因而需要通过\\来表示一个实际意义上的反斜杠,也可以在文件地址字符串前加一个r,告诉Python这是一个地址,不要对\进行转译
access_mode是一个可选的参数,表示打开的方式,常使用可取值如下:
r以只方式打开文件,这是默认模式,从头开始读取r+打开文件并支持读写,从头开始读写w打开文件只允许写入,假如文件存在,则从头开始写入(原文件被覆盖),假如文件不存在,则创立新文件w+打开文件使用于读写,假如文件存在,则从头开始读写(原文件被覆盖),假如文件不存在,则创立新文件a打开一个文件使用于追加(写入),即文件被写入到末尾;假如文件不存在,则会创立新文件a+打开一个文件使用于在末尾读写,假如文件不存在 ,则会创立新文件buffering是一个可选参数,表示寄存区大小,略
上面例子中,read()是将整个文件读取出来的,假如想要一行一行的读取文件,可以用循环
# 将文件地址保存到一个变量中fine_name = '../data/data.txt'# 打开文件,按行循环解决with open(fine_name) as file_txt: for line in file_txt: print(line)输出:
Hello, my name is Jack.
I'm 25 years old.
中间有空行,因而在txt文件末尾有一个看不见的换行符,所以打印出来后会多出来空行
# 将文件地址保存到一个变量中fine_name = '../data/data.txt'# 打开文件,按行循环解决with open(fine_name) as file_txt: for line in file_txt: print(line.strip())输出:
Hello, my name is Jack.
I'm 25 years old.
用strip()函数去除多余的空行(strip() 方法使用于移除字符串头尾指定的字符(默认为空格或者换行符)或者字符序列)
另一种方法
# 将文件地址保存到一个变量中fine_name = '../data/data.txt'# 打开文件,按行循环解决with open(fine_name) as file_txt: lines = file_txt.readlines() # 输出内容for line in lines: print(line.strip())输出:
Hello, my name is Jack.
I'm 25 years old.
readlines()将文件中的内容按行读取,并存储到一个列表中
尽管lines变量是在with代码块中定义的,但是在with代码块之外仍然可以访问得到
# 将文件地址保存到一个变量中fine_name = '../data/data.txt'# 打开文件,按行循环解决with open(fine_name, 'w+') as file_txt: file_txt.write('I like playing basketball!')运行结果:

原来的内容被覆盖,在开头写入一新内容
这里要强调的是,由于在写入文件的时候,一行内容结尾是没有换行符的,所以假如要写入多行内容,需要手动增加换行符
# 将文件地址保存到一个变量中fine_name = '../data/data.txt'# 打开文件,按行循环解决with open(fine_name, 'w+') as file_txt: file_txt.write('I like playing basketball!\n') file_txt.write("I don't like vegetables!\n")运行结果:

假如不想将原有的内容覆盖掉,可以用a参数
# 将文件地址保存到一个变量中fine_name = '../data/data.txt'# 打开文件,按行循环解决with open(fine_name, 'a') as file_txt: file_txt.write('I like playing basketball!\n') file_txt.write("I don't like vegetables!\n")运行结果:

新的内容被追加到原有内容的末尾
import os # 重命名文件test1.txt到test2.txt。os.rename( "../data/data.txt", "../data/data_file.txt" )运行结果

rename()方法存在于os板块下,所以必需先引使用os板块
删除文件
os.remove('../data/data_file.txt')创立文件夹
import os# 在当前目录下创立new_file文件夹os.mkdir("new_file")运行结果:

删除文件夹
os.rmdir('new_file')new_file文件夹将删除
保存json数据
# 引使用json板块import json# 要保存的内容words = "hello world!"# 保存地址filename = 'hello.json'# 打开文件写入json数据with open(filename,'w') as f: json.dump(words, f)读取json数据
# 引使用json板块import json# 保存地址filename = 'hello.json'# 打开文件写入json数据with open(filename,'r') as f: words = json.load(f) print(words)json.dump()存储数据
json.load()加载数据