Python入门(十三) 文件操作

    1.打开/关闭文件

    首先来看一下Python中的open函数:

    open(file, mode='r', buffering=-1, encoding=None)

    1)file: 文件名

    2)mode: 这个跟标准c库中fopen中的mode参数取值类似:

            'r': 以只读方式打开文件,如果文件不存在,则会抛出IOError

   ‘w': 以只写方式打开文件,如果文件不存在,则会自动创建文件;如果文件已经存在,则会清空文件已有的内容

   'a': 以追加的方式打开,一般会与'w'联合使用;

   'b': 二进制模式打开,表示此文件中的数据不是文本数据;

   '+': 读/写模式, 'r+':表示读写方式打开文件,'w+'以读写方式打开文件;

    4)buffering: 表示是否使用缓存,如果使用缓存的话,我们往文件中写入数据时,并不会马上写入到文件中,而是写入到缓存中,直至我们flush()或者close()时,才会把缓存中的数据写入到文件中;

    5)encoding: 指定写入字符的编码,如utf-8

    open函数如果成功,则会返回一个file object,否则返回None.


    关闭文件: close()函数

f = open(file='data.txt', mode='w+', encoding='utf-8')
if f:
    print('open %s success' % f.name)
    f.close()
else:
    print('open failed')
>>>
open data.txt success

    2.读写文件

    在open成功后,会返回一个file object,文件的读写函数,就是调用file object中的读写函数来完成的。

    1)write(str): 把str写入到文件中 

    2)writelines(seq): 把序列中的每一个元素依次写入到文件中,注意每个元素直接并不会自动插入换行符file.linesep

    3)read(): 返回整个文件的数据

    4)readline(): 返回文件中的一行数据

    5)readlines(): 以list的方式返回文件中的每一行数据,注意每一行的换行符并没有去除

    6)read(nums): 读取指定nums个字符

    当已读取到EOF时,会返回None。

#写入文件
f = open(file='data.txt', mode='w', encoding='utf-8')
if f:
    print('open %s success' % f.name)
    f.write('hello Python\n')
    lines = ('hello\n', 'world')
    f.writelines(lines)
    f.close()
else:
    print('open failed')
#读取文件
try:
    f = open('data.txt')
    print(f.readlines())
except IOError:
    print('file IOError')
finally:
    f.close()

>>>
['hello Python\n', 'hello\n', 'world']

    如果文件比较大,调用read()或者readlines()一次性把所有的数据读取到内存中,会占用较大的内容空间,所以一般的建议是一部分一部分的读取:

#循环读取并处理
try:
    f = open('data.txt')
    while True:
        line = f.readline()
        if line:
            print(line)
        else:
            break
except IOError:
    print('file IOError')
finally:
    f.close()

>>>
hello Python

hello

world

    在上面的代码中,我们发现每次都要在finally中加入f.close(),比较麻烦,所以Python在2.5之后,引入with语句:可以自动帮助我们在语句结束后关闭文件,即使是异常引起的结束:

with open('data.txt') as f:
    while True:
        line = f.readline()
        if line:
            print(line)
        else:
            break

    3.文件迭代器

    在Python2.2开始,file object是可以迭代的,这意味着可以直接在for循环中使用。

#iteraing file object
with open('data.txt') as f:
    for line in f:
        print(line)

  执行后的输出与上面一样,但是代码显得更加的简洁。

    file object还有seek, trunscate, flush等方法,这些方法都是跟c标准库中的方法对应的。

你可能感兴趣的:(Python入门(十三) 文件操作)