python文件处理

打开、关闭文件

语法

f = open(name[, mode[,encodeing,[newline]]]) #f为变量,表示将打开的文件句柄赋值给任意变量
f.close() #文件打开后必须要进行关闭
with open(name[, mode]) as f: #使用这种方式,读取文件后会自动关闭
  • name:一个包含了你要访问的文件名称的字符串值
  • mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读®
  • encodeing:指定读取、写入文件的编解码字符集,默认为utf-8
  • newline:指定新的换行符 ,当为写入模式时,当没有这个参数的时候任意平台的换行符都会转换成"\n",若这个参数指定为’’,则系统的默认换行符会被写入,而读模式时若没有此参数,则所有换行符都会转换成系统默认换行符,而若为‘’,则会原样输出。

window的默认换行符"\r\n",mac的默认换行符"\r",linux的默认换行符为"\n"

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
b表示用二进制方式打开,此模式多用于跨平台和多文件类型时,不可单独使用,需要和读写参数一起使用,如rb
+表示读写模式,不可单独使用,需要和读写参数一起使用,如r+

读取文件相关操作

测试文件内容:

test.txt
123456
abcdef
!@#$%^
  • file.read([size]):size 未指定则返回整个文件,返回的是一个字符串类型,如果文件大小 >2 倍内存则有问题,f.read()读到文件尾时返回""(空字串),size指定的是由光标处读入几个字符(其他函数都是指定字节)
f = open('test.txt','r')
l1 = f.read()
{str} '123456\nabcdef\n!@#$%^'
f = open('test.txt','rb')
l1 = f.read() #这里读取的二进制字符串,若需要转为字符串需要解码
l1.decode('utf-8')
  • file.readline():返回一行,同样也是字符串类型
  • file.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行,返回是一个列表
f = open('test.txt','r')
l1 = f.readlines()
{list} ['123456\n','abcdef\n','!@#$%^']
  • for line in f: print line :通过迭代器访问

写入文件操作

  • f.write(“hello\n”):如果要写入字符串以外的数据,先将他转换为字符串
  • f.writelines([list]):写入一个列表,列表中的元素也必须要是字符串类型

其他操作函数

  • f.tell():返回一个整数,表示当前文件指针的位置,字节位置
f = open('test.txt','r')
a = f.read(1) #读取从0开始的第一个字符
print(a) # 输出第一个字符"你"
print(f.tell()) 
#由于utf-8编码,一个中文字符为3字节,因此此值输出为3,指针在第三个字节后
f.close()
  • f.seek(offset[, whence]):用来移动文件指针,单位为字节
    offset:偏移量,可以为正,也可以为负
    whence:指定起始位置,0:文件头,1:当前位置(需要文件打开方式为二进制模式),2:文件末尾,默认值为0
    利用seek打印一个文件的最后一行
f = open("test.txt","rb")
for i in f: #利用这种遍历方式不会将这个文件一次读入,以节省内存
    offs = -10 #设定偏移变量
    while True:
        f.seek(offs,2) #从文件末尾倒移10个字节
        data = f.readlines()
        if len(data) >1 : #若数组中超过两行,那么说明最后一行已经被读入
            print("the last line is : %s"%data[-1].decode("utf-8"))
            break
        offs *= 2
f.close()
  • f.flush():将数据从内存写入到硬盘中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值