Python_文件操作

Python文件操作常用方法

1.打开文件

语法如下:

file_object = open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

➢ file:文件名称。
➢mode:制定了文件打开的方式,函数提供了如下方式,其中,'rt'为默认 方式。
➢buffering:如果buffering的值被设置为0,就不会有缓存;如果值为1, 访问文件时会缓存行;如果值位大于1的整数,表明了这就是寄存区的缓冲 大小;如果取负值,寄存区的缓冲大小则为系统默认。该参数也是非强制性 的。
➢encoding:编码或者解码方式。默认编码方式依赖平台,如果需要特殊设置,可以参考codecs模块,获取编码列表。
➢errors:可选,并且不能用于二进制模式,指定了编码错误的处理方式, 可以通过codecs.Codec获得编码错误字符串 
➢newline:换行控制,参数有:None,'\n','\r','\r\n'。 输入时,如果参数为None,那么行结束的标志可以是:'\n','\r','\r\n'任 意一个,并且三个控制符都首先会被转化为:'\n',然后才会被调用; 如果参数为'',所有的通用的换行结束标志都可以用,但是行结束标识符返 回调用不会被编码。输出时,如果参数为None,那么行结束的标志可以是: '\n'被转换为系统默认的分隔符;如果是'','\n'则不会被编码。
➢closefd:false:文件关闭时,底层文件描述符仍然为打开状态,这是不 被允许的,所以,需要设置为ture
➢opener:可以通过调用*opener*方式,使用自定义的开启器。底层文件 描述符是通过调用*opener*或者*file*, *flags*获得的。
➢*opener*必须返回一个打开的文件描述。将os.open作为*opener*的结 果,在功能上,类似于通过None。

实例1:

fp = open("e:\\pyScripts\\testfile.txt","r")
print(type(fp))    >>> <class '_io.TextIOWrapper'>
fp.close()

实例2:

with方式打开文件:会默认关闭文件

>>> with open("e:\\pyScripts\\sample2.txt","r",encoding="utf-8") as fp:
...     for line in fp:
...         print(line)
...
line 1

line 2

line 3

文件的操作模式

模式描述 
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式
r+打开一个文件用于读写。文件指针将会放在文件的开头
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新 文件
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容 将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是 说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加 模式。如果该文件不存在,创建新文件用于读写
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该 文件不存在,创建新文件用于读写

2.读文件 

fileObject.read([size])

size为读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个"\n"符号。

>>> fp = open("e:\\pyScripts\\sample2.txt")
>>> fp.tell()
0
>>> fp.read()
'test1\ntest2\n\ntest3\n'
>>> fp.tell()
23
>>> fp.close()
>>> fp = open("e:\\pyScripts\\sample2.txt")
>>> fp.read(8)
'test1\nte'
>>> fp.tell()
9
>>> fp.close()

fileObject.readline([size])

读取当前行的内容,以字符串的形式返回,并且结尾有换行符'\n'。读完一行,文件操作标记移动到下一行的 开头。指定参数,若参数<=当前行的字节数,返回该参数指定的字节数。若参数>当前行的字节数,返回当前行的内容。读完所有行再执行该函数,返回空字符串

>>> fp = open("e:\\pyScripts\\sample2.txt")
>>> fp.readline()
'test1\n'
>>> fp.tell()
7
>>> fp.readline()
'test2\n'
>>> fp.readline()
''
>>> fp.close()

>>> fp = open("e:\\pyScripts\\sample2.txt")
>>> fp.readline(4)
'test'
>>> fp.seek(0,0)
0
>>> fp.readline(7)
'test1\n'
>>> fp.seek(0,0)
0
>>> fp.readline(10)
'test1\n'
>>> fp.close()

fileObject.readlines( [size] )

把文件每一行作为一个list的一个成员,类型是一个字符串,并且结尾会有 一个换行符"\n",并返回这个list。这个函数的内部是通过循环调用 readline()来实现的。

>>> fp = open("e:\\pyScripts\\sample2.txt")
>>> fp.readlines()
['test1\n', 'test2\n', '\n', 'test3\n']
>>> fp.seek(0,0)
0
>>> fp.readlines(5)
['test1\n']
>>> fp.seek(0,0)
0
>>> fp.readlines(8)
['test1\n', 'test2\n']
>>> fp.seek(0,0)

3.写文件

fileObject.write( str )

将str写入文件中,如需换行的话,手动加换行符'\n'

with open("e:\\pyScripts\\sample2.txt","w") as fp:
    fp.write('test10201\ntest10202')

fileObject.writelines(seq)

把seq(序列)的内容全部写到文件中(多行一次性写入),也不会自动加入换行符。

序列中的元素必须是字符串

with open("e:\\pyScripts\\sample2.txt","w") as fp:
    testList = ['test01\n','test02\n','test03\n']
    fp.writelines(testList)

4.其他常用操作

fileObject.tell()-----返回文件操作的当前位置

test02.py

>>>fp = open("e:\\pyScripts\\sample2.txt","r")
>>>print("初始化文件读取的当前位置:",fp.tell())
初始化文件读取的当前位置: 0
>>>print("读取文件的行内容:",fp.readline())
读取文件的行内容: test01
>>>print("读取该行后文件操作的当前位置:",fp.tell())
读取该行后文件操作的当前位置: 8
>>>fp.close()

fileObject.seek( offset[, from ] )---该方法是改变当前文件的位置

offset变量表示要移动的字节数。
from变量指定开始移动字节的参考位置。0--代表从文件的开头移动,1--代表从文件的当前位置移动,2--代表从文件的末尾移动
注意:如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

test02.py

>>>fp = open("e:\\pyScripts\\sample2.txt","r")
>>>print("初始化文件读取的当前位置:",fp.tell())
初始化文件读取的当前位置: 0
>>>print("读取文件的行内容:",fp.readline())
读取文件的行内容: test01
>>>print("读取该行后文件操作的当前位置:",fp.tell())
读取该行后文件操作的当前位置: 8
>>>fp.seek(0,2)
>>>print("fp.seek(0,2)后回到文件的末尾位置:",fp.tell())
fp.seek(0,2)回到文件的初始位置: 52
>>>fp.seek(0,0)
>>>print("fp.seek(0,0)后回到文件的初始位置:",fp.tell())
fp.seek(0,0)回到文件的初始位置: 0
>>>fp.close()

fileObject.truncate( [size] )---把文件裁剪成规定的大小,默认的是裁到当前文件操作标记的位置。

>>> fp=open("e:\\pyScripts\\sample1.txt","r+")
>>> fp.truncate(2)
2
>>> fp.seek(0,0)
0
>>> fp.read()
'te'
>>> fp.close()

fileObject.flush()---将缓冲区的内容写入磁盘

>>> fp=open("e:\\pyScripts\\sample2.txt","w+")
>>> fp.writelines(testList)
>>> fp.flush()
>>> fp1=open("e:\\pyScripts\\sample2.txt","r")
>>> fp1.read()
'test01\ntest02\ntest03\n'
>>> fp.close()
>>> fp1.close()

fileObject.fileno()---返回一个长整型的文件标签

>>> fp=open("e:\\pyScripts\\sample1.txt","r")
>>> fp.fileno()
3
>>> fp1=open("e:\\pyScripts\\sample2.txt","r")
>>> fp1.fileno()
4
>>> fp.close()
>>> fp1.close()

 

5.文件的常见属性

fp = open("e:\\pyScripts\\sample2.txt")
print("文件是否关闭:",fp.closed)
print("文件的访问模式:",fp.mode)
print("文件名称:",fp.name)
fp.close()

6.小练习

删除文件中的空行

# 解法1:
fp=open("e:\\pyScripts\\sample1.txt","r")
lst=fp.readlines()
result=[]
for i in lst:
    if i !="\n":
        result.append(i)
fp.close()
fp=open("e:\\pyScripts\\sample2.txt","w+")
fp.writelines(result)
fp.close()

# 解法2:

fp=open("e:\\a.txt","r+")
lines= fp.readlines()
fp.seek(0,0)
for line in lines:
    if line.strip():
        fp.write(line)

fp.close()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值