Python 从入门到实战28(文件的读操作)
我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。
上篇文章我们讨论了文件的打开、创建、关闭的相关知识。今天我们将学习一下文件的读的相关操作知识。
1、读取文件read()方法
在python中通过打开文件后就可以读取文件内容了。
读取指定字符方法方法: file.read(size)
file----为打开的文件对象
size---为可选参数,用于指定要读取的字符个数,若是省略则一次性读取所有内容。
注意:调用read()方法读取文件内容的前提是,打开文件时,打开模式r或者r+。
举例说明:读取文件"test_data.txt"
def main():
with open("test_data.txt", "r") as test_data_file:
test_data = test_data_file.read() #读取文件中全部内容
print(test_data)
输出参考:
xiaomi,123456
xiaohua,135790
xiaohui,246810
另外,举例读取一部分字符:
def main():
with open("test_data.txt", "r") as test_data_file:
test_data = test_data_file.read(13) #读取前13个字符
print(test_data)
输出结果:
xiaomi,123456
2、seek()指定光标位置
上面我们使用read()方法读取文件,读取文件都是从开头开始读取的。如果我们想从某一位置开始读取要怎么实现呢?可以使用seek()方法将文件的指针移动到新的位置处。然后在使用read(size)方法读取文件。
seek()语法: file.seek(offset, [, whence])
参数说明:offset----表示要移动的字节数,可以为正数、负数或零。
whence(可选)----表示移动文件指针的参考位置,默认值为0。有三种取值:0:表示从文件开头开始计算偏移量。1:表示从当前位置开始计算偏移量。2:表示从文件末尾开始计算偏移量。
举例说明:
def main():
with open("test_data.txt", "r") as test_data_file:
test_data_file.seek(7) #索引也是从0开始,7指第8个字符开始
test_data = test_data_file.read(6) #从第8个字符读取6个字符,即读取密码
print(test_data)
参考下面的文档内容,
输出结果:123456
举例读取最后一组数据:
def main():
with open("test_data.txt", "r") as test_data_file:
test_data_file.seek(-12,2) #移动到文件末尾向前第12位置
test_data = test_data_file.read(12) #读取12个字符,即读取最后一组数据
print(test_data)
执行报错了,因为以r模式打开只支持从文件头开始计算相对位置。以rb方式才支持从文件末尾计算。
修改后查看:
def main():
with open("test_data.txt", "rb") as test_data_file:
test_data_file.seek(-14,2) #移动到文件末尾向前第14位置
test_data = test_data_file.read(14) #读取14个字符,即读取最后一组数据
print(test_data)
输出参考:正确输出最后一行数据,
3、readline()读取一行
在使用read()方法读取文件时,如果文件很大,一次性读取全部内容到内存,容易造成内存不足。如何解决这个问题呢?可以通过读取一行数据。
使用语法:file.readline()
同样需要注意,使用此方法也要打开模式是r(只读)或者r+(读写)。
举例说明,如我们读取上面test_data.txt 按行输出,并加上序号。
参考代码:
def main():
with open("test_data.txt", "r+") as test_data_file: #打开文件
sequence_no = 0
while True:
sequence_no = sequence_no+1 #作为序号输出
line = test_data_file.readline() #读取一行数据
if line == "": #读取到文件末尾退出循环,即退出读取文件
break
print(sequence_no,"\t"+ line) #打印序号和一行内容
输出结果:
1 xiaomi,123456
2 xiaohua,135790
3 xiaohui,246810
4、读取全部行readlines()
使用readlines()可以读取全部文件内容,此方法返回值是一个字符串列表。
使用语法:file.readlines()
同样需要注意,使用此方法也要打开模式是r(只读)或者r+(读写)。
举例说明,如我们读取上面test_data.txt
def main():
with open("test_data.txt", "r+") as test_data_file: # 打开文件
test_data = test_data_file.readlines() #读取全部内容
print(test_data)
输出结果:
['xiaomi,123456\n', 'xiaohua,135790\n', 'xiaohui,246810']
若是想一行行的输出,也可以循环打印:
def main():
with open("test_data.txt", "r+") as test_data_file: # 打开文件
test_data = test_data_file.readlines() #读取全部内容
for line in test_data:
print(line)
输出结果参考:
5、读取csv文件
数据为my_data,在CSV文件中存储的。
内容如下:
读取csv方法:导入csv模块>reader()读取>输出信息查看
#coding = utf-8
import csv #导入csv 包
def main():
user_file = csv.reader(open('my_data.csv', 'r')) # 打开文档并读取
for line in user_file: #按行输出
print(line)
执行后输出结果参考:
['zhangsan', '123456']
['wangwu', '257890']
['liuliu', '358147']
今天先写学习到这里了,每天进步一点点。明天也要加油啊!