我们通过编写demo来学习文件的操作方法。
如下,如果my_file.txt不存在,会自动创建,模式为写模式
f = open('my_file.txt',mode='w');
f.write('hello world!');
f.close();
执行完上面代码之后,你应该会发现当前目录下多出了一个my_file.txt文件。
如果我们的mode保持默认的操作模式,默认为读,那么程序就会报错,修改代码如下
f = open('my_file.txt');
f.write('hello world!');
f.close();
执行时你会发现,程序报错了,所以如果要写数据到文件记得要修改操作模式哦。
我们也可以直接写入一个数据集合
f = open('my_file.txt',mode='w');
data=['hello word!\n','yes!']
f.writelines(data)
f.close();
当然,我们还可以随自己所想,如果文件中已存在内容,我们可以指定从哪点开始写
f = open('my_file.txt',mode='w');
f.write("hello word!")
f.seek(2)
f.write("xxxxxxxx")
f.close();
f = open('my_file.txt',mode='r');
print(f.read())
f.close()
执行结果为:hexxxxxxxx! 你会发现,确实是从第2个开始写xxxxxxxx
OK,我们看一下如何读文件中的数据,file对象提供了三个方法进行读操作
1、read : 每次读取整个文件,通常将文件内容读取出来存放到一个字符串变量中。对于过大的文件则会出现问题
2、readline :每次只读取一行。
3、readlines :每次读取整个文件,读取后自动将文件内容分析成一个行的列表,该列表可以由 for... in ... 进行遍历处理。
三个方法都可以传入一个变量控制每次读取的数据量。如:假设以字符模式读取read(4)表示读前4个字符数据。
示例代码如下
f = open('my_file.txt',mode='w');
f.write('hello world!');
f.close();
f = open('my_file.txt',mode='r');
print(f.read())
f.close();
f = open('my_file.txt',mode='r');
print(f.readline())
f.close();
f = open('my_file.txt',mode='r');
print(f.readlines())
f.close()
输出如下:
hello world!
hello world!
['hello world!']
因为内容只有一行,所以f.read()和f.readline()读到的数据是一样的。而f.readlines()则返回一个列表类型的结果。
一般情况下,小文件可以优先考虑使用read和readlines,因为一次性读取文件,性能会好一些,当然是在文件不大, 内存足够的情况下,如果是大文件只能使用readline一行一行来了。
读取大文件推荐方法
1、读取大文件是,可以使用fileinput模块,其已包含了打开文件的函数,我们只需要传递文件名给它就可以了
示例代码:
import fileinput
for line in fileinput.input('my_file.txt'):
print(line)