文件操作
在Python中文件的操作应用非常多。比如大数据领域,涉及许多数据处理的需要,数据处理就是从一个文件对数据进行相关分析、抽取或重写后,在写入另一个文件,通过对不同文件的数据处理加工,从而达到化繁为简,对数据梳理的作用。在这里只说在实际应用中经常用到的。
打开文件
open(file_name,mode[,buffering][,encoding=])
file_name:这是文件名,在这里涉及到相对路径和绝对路径。
mode:是对文件的操作模式,比如读(r)、写(w)等,下面会详细说明
buffering:这个参数是内存缓冲时寄存的大小。
encoding:就是按什么方式打开文件,这是防止文件乱码时。
注:相对路径:就是相对于程序当前工作目录的路径。其中.表示相对路径;..表示父文件夹。。
绝对路径:就是指从根目录找到这个file_name的路径。比如F:\MyWeb2\web2py.py
在学习文件的方法和模式之前我们应该知道游标或者说光标位置的概念,就和Python中for循环中(for i in ltems)一样,在刚开始的时候,i指向items中的第一个位置中的数据,在一次循环后,i指向了第二个items中的位置数据。而这和文件操作是的概念基本相同,比如:打印一句话,"hello world",这是如果光标在w前,那么在输出时,只能将"world"这个内容打印出来。
文件模式和方法
#再模式中最基本的是r、w、a
# r (只读模式)在这个模式下,只能使用读命令,不能使用写命令,而且用只读模式时光标默认在文件的开始位置,即从开始位置开始读内容。如果文件不存在会报错
f = open('2018','r',encoding='utf-8')#这一行常称为句柄
data = f.read()
print(data)
f.close()
#在这里我首先拿到句柄,这个句柄是用r模式创建,然后用来使用read()方法来读取内容,这时的内容是读到缓存区,在使用打印后在取出来进行打印。read方法还可以写参数,表示要读的字符个数;如果没有写参数表示一个一个读取全部。字符和汉字都为一个字符。
print(f.readline())#光标移到下一行
print(f.readline())
在这里这个方法为读取一行,在这里需要注意的是,就需要用到上面的概念了,在读取第一行时后,光标移到这一行的最后一个位置因此在读取时将读取下一行。
f.readlines()
这个方法为读取多行,里面可以放参数,如果没有参数默认读取全部跟read方法类似
注:记得在用完之后把文件流关闭,虽然Python机制给我们提供了关闭。但是还是尽量自己关闭。
# w (只写模式)这个模式下不能使用读操作,如果文件名不存在则会自动创建一个;如果存在则会清空文件内容并打开文件。
f = open('2018','w',encoding='utf-8')#在创建句柄的时候通过判断模式来清空文件内容
f.write('hello world')
f.write('du')
f.close()
这里给文件了两次写的操作,在写完第一行后,游标指到了"d"后面就从这里连续写,如果要写其它特殊字符比如换行,空格也可以。
# a (追加)这个模式同w有相似也有不同,如果文件不存在则创建文件,如果文件存在则将光标指到文件末尾,这里也不能用读操作
f = open('2018','a',encoding='utf-8')
f.write('2019')
f.close()
这时会从游标开始的位置,写入字符2019.
文件模式中还有一个(+)构成
#r+ w+ a+
f = open('2018','r+',encoding='utf-8')
print(f.readline())
print(f.write('world'))
f.close()
#用这个模式创建的句柄,还是游标从开头位置,该怎么读怎么读,但是写入是在文件内容最后写。
f = open('2018','w+',encoding='utf-8')
print(f.readline())
print(f.write(' world'))
f.seek(0)
print(f.readline())
f.close()
对于w+在创建句柄是,先把文件的内容清空,这是读出的内容为空,在写入时,在调用读一行的方法
还是读出为空,是因为这时的光标是在这行字符串的最后一个位置,后面没有内容。这时有一个seek方法用来指定游标位置,从而在最后一个打印时能将内容显示出来。
注:seek方法用来指定游标位置
f = open('2018','a+',encoding='utf-8')
print(f.readline())
print(f.tell())
f.close()
这时光标是在内容末尾的;r+与它相反
注:tell方法是显示当前游标的位置
#with 由于在使用文件时的关闭容易疏漏,所以Python给我们提供了with函数,就是只要是with函数包含的部分执行完毕就自动实现close方法
with open('2018','a+',encoding='utf-8') as f:
print(f.readline())
print(f.tell())
以上就是常用的操作,但是这些操作无法实现修改
在文件中的修改是通过替换或者说建立一个新的文件来实现。从旧文件中取出一行写入到新文件中,当判断这一行需要修改是则将旧文件取出后进行修改,修改完后写入到新文件中。
#flush 方法,在数据关闭之前是存放在临时缓存区,直到缓存区满或者close,flush作用帮我们把缓存的数据放到存储区中,可以做进度条
import sys,time
for i in range(30):
time.sleep(0.1)
读取文件时
for i in f:#迭代器,打开一个文件最优的方式
#for内部将F对象做成一个迭代器用一行取一行
print(i.strip())
#用一下方式时,是把内容都存到内存,消耗内存不建议使用
for i in f.readlines():
''.join([i,'i like'])
print(i.strip())
领取专属 10元无门槛券
私享最新 技术干货