码迷,mamicode.com
首页 > 其他好文 > 详细

文件读写操作

时间:2018-06-02 11:32:52      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:nts   显示文件   其他   coding   没有   tps   传参   iss   文件描述符   

简介

文件的读写操作几乎是每门语言都有的基础。python的文件操作过程可以分成以下三步:

  1. open()函数打开一个文件(没有则新建),获得文件操作符
  2. 通过文件句柄对文件进行操作
  3. 完成文件操作,用close()函数关闭文件句柄

下面就按这三步来,简单总结一下。

open()打开一个文件

在对文件进行操作时,我们首先是使用open()函数来打开一个文件,从而获得它的文件操作符(也有称文件句柄),不论是读操作还是写操作,都是使用open()。 
那么,怎么使用open()呢? 
我们来看看open()的几个关键的参数.

open(‘test.txt’,’mode’,encoding=’xxx’)

上式中,第一个参数是文件的路径名;第三个参数的xxx那里是填入适当的编码格式,加入你的文件是gbk格式的,你打开的时候,为了防止出现乱码,你就得告诉函数,需要用什么格式打开。 
至于第二个参数mode,有许多个值可以填的,可以根据需求填值:

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

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

 

读操作

read()一次性读取文件的全部内容,可以在read(size)里面传参,表示每次读取size个字节的内容。

readline() 每次读取文件一行的内容。 
readlines()一次读取所有内容并按行返回 list。

写操作

只有调用close()方法时,操作系统才能保证把没有写入的数据全部写入磁盘:

#!/usr/bin/env python3

# _*_coding:UTF-8_*_

# 写操作

f = open(‘fileTest2.txt‘,‘w‘)

f.write(‘hello! It`s me!‘)

f.close()

对于要写入特定编码的文本文件,可以给open() 的encoding传参:

#!/usr/bin/env python3

# _*_coding:UTF-8_*_

# 写操作

f = open(‘fileTest2.txt‘,‘w‘,encoding=‘gbk‘)

f.write(‘hello! It`s me!‘)

f.close()

write()是文件写操作中一个比较简单的操作,它将字符串写入文件,没有返回值。除了这个write()还有writelines()函数,

这个函数是向文件写入一个序列字符串列表,换行需要字节添加换行符:

#!/usr/bin/env python3

# _*_coding:UTF-8_*_

# writelines()

str = [‘你好,‘,‘欢迎!\n‘,‘这里是皇者风范的博客.‘]

f = open(‘fileTest2.txt‘,‘w‘,encoding=‘utf-8‘)

f.writelines(str) f.close()

‘‘‘

这是运行结果:

你好,欢迎!

这里是皇者风范的博客.

‘‘‘

文件其他操作函数

seek():指定文件指针的位置,seek(0)把指针移动到文件开头处; 
tell():获取文件指针的位置;

#!/usr/bin/env python3

# _*_coding:UTF-8_*_

f = open(‘fileTest.txt‘,‘r‘,encoding=‘utf-8‘)

#读取一行

data = f.readline()

# 查看指针位置

print(data.strip())

print(‘输出一行后的文件指针在:‘,f.tell())

f.seek(0)

print(‘用seek()将文件指针放回开始处:‘,f.tell())

print(‘再次输出:‘,f.readline())

f.close()

这是运行结果: 

技术分享图片

 

truncate():截断文件数据,返回保留指定之前的数据,不能用ww+模式打开;

with open(‘fileTest2.txt‘,‘r+‘,encoding=‘utf-8‘) as f:
    # 截断5个字符后,读取文件
    f.truncate(5)
    print(‘调用truncate(5)之后的输出:‘, f.read())

flush():刷新文件内部缓冲区,下面是利用flush()刷新可以创建一个单行显示动态的进度条。

#!/usr/bin/env python3
# _*_coding:UTF-8_*_
import sys,time
for i in range(50):
    sys.stdout.write("#")
    sys.stdout.flush()
    time.sleep(0.1)

fileno():获取文件描述符

f = open(‘fileTest.txt‘,‘r‘,encoding=‘utf-8‘)
print(f.fileno())

isatty():测试是否是一个终端设备文件 
next()返回文件下一行;以下是返回10行的代码:

f = open(‘fileTest.txt‘,‘r‘,encoding=‘utf-8‘)
for  i in range(10):
    print(f.__next__().strip())
f.close()

技术分享图片

encoding():显示文件编码:

f = open(‘fileTest.txt‘,‘r‘,encoding=‘utf-8‘)
print(f.encoding)

replace()可用于文件的修改:

f = open(‘fileTest.txt‘,‘r‘,encoding=‘utf-8‘)
for i in f.readlines():
    if ‘凌霄花‘ in i:
        i = i.replace(‘凌霄花‘,‘很多很多凌霄花‘)
    print(i.strip())
f.close()

运行结果:

技术分享图片

关闭文件操作

我们结束文件操作后,需要调用close()为关闭文件操作符,以免占有内存资源。当然,python为我们提供了更便捷的语句,帮助我们关闭,那就with。上面的代码,修改成下面这个也是行得通的,而且也不用在写close()函数:

with open(‘fileTest.txt‘,‘r‘,encoding=‘utf-8‘) as f:
    for i in f.readlines():
        if ‘凌霄花‘ in i:
            i = i.replace(‘凌霄花‘,‘很多很多凌霄花‘)
        print(i.strip())



文件读写操作

标签:nts   显示文件   其他   coding   没有   tps   传参   iss   文件描述符   

原文地址:https://www.cnblogs.com/pengloveluyu/p/9124402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!