python学习(5)——文件

本文详细介绍了Python中文件的基本操作,包括打开文件的不同模式(如读写、追加等)、读取内容(read、readline、readlines)与写入内容(write、writelines)的方法,以及文件关闭、flush、seek等高级操作。同时提到了使用with语句的便利性和两个文件操作的实践练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在写python程序的时候,经常需要用到文件,下面来看一下文件的基本操作:
对于文件读写的过程,我们可以分为3步:
打开文件–>读文件或写文件内容–>关闭文件

文件的基本操作
1. 打开文件

f=open(‘filename’)
filename是要打开的文件名称,如果在当前目录,可直接用文件的名字,否则,一般会使用它的绝对路径
如果文件不存在, open() 函数就会抛出一个 IOError 的错误,并且给出错误码和详细的信息告诉你文件不存在。

这样直接打开的文件是只读的,如果执行写操作,就会报错。如果想要写,就要以相应的模式打开,如:
open(‘filename’,’a+’)

open函数的模式:
r:只读,不可以写入,如果文件不存在则报错
r+:可读写,依次覆盖源文件内容,如果文件不存在则报错
w:可写,不可读,并覆盖源文件内容,如果文件不存在则创建
w+:可读写,打开文件时直接删除源文件内容,如果文件不存在则创建
a:可写,在文件末尾追加,不可以读,如果文件不存在则创建
a+:可读写(追加),在文件末尾写入,如果文件不存在则创建

另外,还有一些比较特殊的模式,如:
•rb模式——读取二进制文件,比如图片、视频等
•gbk模式——读取非 ASCII 编码的文本文件,常用于windows系统中

2. 向文件中写入内容或读文件内容

读文件——3种方法
(1)f.read()
一次读取文件的全部内容;

In [1]: f = open('westos')

In [2]: f.read()
Out[2]: 'westos lala\nhappy day\neveryday\nwestos\nwelcome to here\n'

有时文件内容过大,我们也可以用f.read(size),size表示要读的字节数
(2)f.readline()
一次读取一行内容,也可以使用size参数

In [8]: f.readline()
Out[8]: 'westos lala\n'

In [9]: f.readline(4)
Out[9]: 'happ'

In [10]: f.readline()
Out[10]: 'y day\n'

(3)f.readlines()
读取所有的行然后把它们作为一个字符串列表返回

写文件——2种方法
(1)f.write()
把数据写入到文件中去
(2)f.writelines()
操作的对象是列表,不会自动换行,需要自己添加换行符号

3. 关闭文件

f.close()
打开文件用完之后记得要关闭,否则它会一直占用系统资源。

其它操作

f.flush() 将缓冲区的内容写入到硬盘中
f.seek(offset[,whence])
——offset 表示移动多少字节,0表示不移动,负数表示向前移动,正数表示向后移动
——whence 0表示文件头,1表示当前位置,2表示文件尾
fileno() 函数,返回当前的文件描述符,一个数字
isatty() 函数,当前打开的文件是否是一个终端设备
f.closed 查看当前文件是否关闭 ,返回True,False

In [12]: f = open('westos','w+')

In [13]: f.write('hello world')

In [14]: f.read()
Out[14]: ''

In [15]: f.flush()

In [16]: f.seek(0,0)

In [17]: f.read()
Out[17]: 'hello world'
with语法

一般情况打开一个文件,经过操作之后,都要执行f.close() 将文件关闭
with 用于需要打开、关闭成对的操作,可以自动关闭打开对象 .
with expression as obj:# 将打开的对象赋值给 obj
例如:打开一个文件,将里面所有的“hello“替换成“westos“
其中“hello“文件是用with打开的,我们也可以看见它并没有使用close()

f1=open('westos','a+')
with open('hello','a+') as f:
    for line in f:
        str1=line.replace("hello","westos")
        f1.write(str1)
f1.close()

练习1:
文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行,存入另一个文件 这个字符被用做Python , Perl, Tcl, 等大多脚本文件的注释符号.

#!/usr/bin/env python
# coding:utf-8
__author__ = "xj"

f1 = open('guolv2', 'w+')
with open('guolv1') as f:
    for line in f:
        if line[0] != "#":
            f1.write(line)

f1.close()

练习2:文件比较. 写一个比较两个文本文件的程序. 如果不同, 给出第一个不同处的行号和列号。

#!/usr/bin/env python
# coding:utf-8
__author__ = "xj"

f1 = open("com1")
f2 = open("com2")
r = 0
#判断行数的另一个写法,但行数不同(其余全部一样)时,不会有输出
# while True:  
#     r+=1
#     line1=f1.readline()
#     line2=f2.readline()
#     if line1 != line2:
for line1, line2 in zip(f1, f2):
    r += 1
    if line1 == line2:
        pass
    else:
        c = 0
        for (i, j) in zip(line1, line2):
            if i == j:
                c += 1
            else:
                print "第一处不同在第%d行,第%d列" % (r, c)
                break
        break
f1.close()
f2.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值