【python3之文件操作】

摘要:
/Usr/bin/envpython#-*-coding:utf-8-*-f=openprintdata1=f.read()print1.xt5554242123输出:55542342123补充:1)python中有三种方法来处理文件内容的读取:read()#一次读取所有文件内容。2) 打印#判断文件是否以r模式打开3)打印#判断是否关闭4)在python文件中移动文本文件内容的操作。seek#从文件中给出移动指针,从哪里偏移偏移字节,在结束方向移动,在开始方向文件移动。sell()#返回当前文件中的位置。但是,with可以很好地处理上下文生成的异常。
 一、文件操作

1.文件处理的流程

1)打开文件,得到文件句柄并赋值给一个变量

2)通过句柄对文件进行操作

3)关闭文件

例如:

f = open('chenli.txt') #打开文件
first_line = f.readline()
print('first line:',first_line) #读一行
data = f.read()# 读取剩下的所有内容,文件大时不要用
print(data) #打印读取内容
f.close() #关闭文件

2.文件操作基本用法

1)基本用法:

file_object = open(file_name, access_mode = ‘r’, buffering = -1)

open函数有很多的参数,常用的是file_name,mode和encoding

file_name:打开的文件名,若非当前路径,需指出具体路径
access_mode文件打开模式
buffering的可取值有0,1,>1三个,0代表buffer关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),>1表示初始化的buffer大小;
encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;

2)文件打开模式

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】,文件指针自动移到文件尾。

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】,消除文件内容,然后以读写方式打开文件。
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】,以读写方式打开文件,并把文件指针移到文件尾。

 "b"表示以字节的方式操作,以二进制模式打开文件,而不是以文本模式。

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

3)以读r的方式打开文件

#!/usr/bin/env python
# -*- coding:utf-8 -*-
f=open('1.txt',encoding='utf-8',mode='r')
print(f)
data1=f.read()
print(data1)

1.txt

55542342
123

输出:

<_io.TextIOWrapper name='1.txt' mode='r' encoding='utf-8'>
55542342
123

补充:

1)python中有三个方法来处理文件内容的读取:
read() #一次读取全部的文件内容。

readline() #每次读取文件的一行。

readlines() #读取文件的所有行,返回一个字符串列表。

2)print(f.readable())    #判断文件是否是r模式打开的

3)print(f.closed)    #判断文件是否是关闭状态
4)python中在文本文件内容移动的操作 file.seek(offset,whence=0) #从文件中给移动指针,从whence(0起始,1当前,2末尾)偏移offset个字节,正往结束方向移动,负往开始方向移动 file.tell()          #返回当前文件中的位置。获得文件指针位置
5) file.truncate(size=file.tell()) #截取文件到最大size个字节,默认为当前文件位置

4)以w方式写入文件

f=open('a.txt','w',encoding='utf-8')
# f=open('b.txt','r',encoding='utf-8') #以读的方式打开文件,文件不存在则报错
f=open('b.txt','w',encoding='utf-8')
# print(f.writable())

f.write('111111
22222222')
f.seek(0)
f.write('
333333
444444')

f.writelines(['
55555
','6666
','77777
'])
f.close()

a.txt 为空

b.txt

333333
444444
55555
6666
77777

补充:

file.write(str)     #向文件中写入字符串(文本或二进制)
file.writelines(seq)    #写入多行,向文件中写入一个字符串列表,注意,要自己加入每行的换行符
file.flush()    #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入.

5)文件修改

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
read_f=open('b.txt','r')
write_f=open('.b.txt.swap','w')
for line in read_f.readlines():
    if line.startswith('1111'):
        line='2222222222
'
    write_f.write(line)
read_f.close()
write_f.close()
os.remove('b.txt')
os.rename('.b.txt.swap','b.txt')

3.上下文管理with语句

当你做文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。

正常情况下,代码如下:

file = open("/tmp/foo.txt")
data = file.read()
file.close()

这里有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。

然而with可以很好的处理上下文环境产生的异常。下面是with版本的代码:

with open("/tmp /foo.txt") as file:
    data = file.read()

with的基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。

补充:

模拟   tail -f access.log

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# tail -f access.log
import time
with open('access.log','r',encoding='utf-8') as f:
    f.seek(0,2)
    while True:
        line=f.readline().strip()
        if line:
            print('新增一行日志',line)
        time.sleep(0.5)

免责声明:文章转载自《【python3之文件操作】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇eNSP——利用单臂路由实现VLAN间路由mp4文件格式解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

UVM基础之---------uvm factory机制base

从名字上面就知道,uvm_factory用来制造uvm_objects和component。在一个仿真过程中,只有一个factory的例化存在。 用户定义的object和component types通过typedef或者宏在factory中注册,factory产生和保存轻量级的代理(proxy):   1.  uvm_object_registry #(...

python3 字符串方法

1.capitalize() 将字符串的第一个字符改为大写 1 >>> s='i love cnblog' 2 >>> s.capitalize() 3 'I love cnblog' 2.casefold() 将字符串所有字符改为小写 1 >>> (s.capitalize()).casefold()...

Windows系统中CreateFileMapping实现的共享内存及用法

在32位的Windows系统中,每一个进程都有权访问他自己的4GB(232=4294967296)平面地址空间,没有段,没有选择符,没有near和far指针,没有near和far函数调用,也没有内存模式。 每个进程都有独立的4GB逻辑地址空间,32位的Windows系统允许每一个进程独立访问自己的内存,即独立于其它进程,也即它自己的32位逻辑地址空间。操作...

python3学习笔记11(函数)

函数 python提供了许多内建函数,例如print()。 自己创建的函数,叫做用户自定义函数。 定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号()。 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 函数内容以...

Window环境下安装Python2和Python3  

1. 下载安装包 1 2 3 https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi    # 2.7安装包   https://www.python.org/ftp/python/3.6.4/python-3.6.4-amd64.exe      # 3.6安装包...

SetupDi系列函数

SetupDiClassGuidsFromName WINSETUPAPI BOOL SetupDiClassGuidsFromNameA( PCSTR ClassName, LPGUID ClassGuidList, DWORD ClassGuidListSize, PDWORD RequiredSize ); SetupDiClassGuidsF...