三、Python之文件操作

计算机系统分为:计算机硬件,操作系统,应用程序三部分。
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来,转载自(http://www.cnblogs.com/linhaifeng/articles/5984922.html)

文件的操作主要有打开文件、读取文件、修改或者生成文件

1. 打开文件

方法一:

fh=open('a.txt','r',encoding='utf-8')     #1) 打开文件
data=fh.read()                            #2) 读取文件类容
fh.close()                                #3) 关闭文件

方法二:

with open('a.txt','r',encoding='utf-8') as fh:    #1) 打开文件
    data = fh.read()                              #2) 读取文件类容,这种方法不用关闭,程序会帮助关闭

2. 读取文件内容

文件的读取有以下三种方式:

fh.read()      #光标移动到文件的末尾即一次性读取文件的所有内容,不建议使用
fh.readline()  #光标移动到第二行首部,即每次读取文件的一行内容,建议使用
fh.readlines() #读取每一行内容,存放于列表中

3. 指定位置读取文件(read/seek/truncate)

read、seek、tell、truncate等,下面主要介绍read和seek,用到了其他的再更新
read()文件打开方式为文本模式时,设置读取字符数;文件打开方式为b模式时,设置读取字节数

with open('a.txt','r',encoding='utf-8') as fh:
    fh.read(2)                                                 #读取2个字符,默认打开凡是是文本模式:rb

with open('a.txt','rb',encding='utf-8') as fh:
    fh.read(2)                                                 #读取2个字节

with open(r'test.png','rb') as fh:    #读图片,bytes,b方式读,不管是什么文件(图片、视频、文本)都可以正常打开,只是打印是需要指定解码方式
    print(fh.read())

seek() seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

a.txt内容如下:
1234567
abcdefg
with open('a.txt','r',encoding='utf-8') as fh:
    print(fh.seek(3))    #3

4. 修改文件

import os
with open('a.txt','r',encoding='utf-8') as f1,open('a.txt.swap','w',encoding='utf-8') as f2:
    for line in f1:
        if 'alex' in line:
            line = line.replace('aaa','bbb')            #函数replace进行字符串替换,把文件中的'aaa'替换成'bbb'
        f2.write(line)
os.remove('a.txt')
os.rename('a.txt.swap','a.txt')

5. 生成文件

fh.write('1111\n222\n')                                                   #针对文本模式的写,需要自己写换行符
fh.write('1111\n222\n'.encode('utf-8'))                                   #针对b模式的写,需要自己写换行符
fh.writelines(['333\n','444\n'])                                          #文件模式,同时写入多行,以列表的形式
fh.writelines(('555\n','666\n'))                                          #文件模式,同时写入多行,以元组的形式
fh.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')])  #b模式

6. 其他文件操作函数

fh.readable()   #文件是否可读
fh.writable()   #文件是否可读
fh.closed       #文件是否关闭
fh.encoding     #如果文件打开模式为b,则没有该属性
f.hflush()      #立刻将文件内容从内存刷到硬盘
fh.name         #打印文件名称
posted @ 2017-12-14 19:10  丢失固执  阅读(308)  评论(0编辑  收藏  举报