Python内置的读写文件的函数,底层实现还是C。

读文件函数结构:

要用读文件模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标识符。

"r"表示读文件,如果文件不存在,就会抛出错误码和详细的信息。

如果文件打开成功,可以使用读取)函数一次读取文件的全部内容,以read()函数为例,Python把内容读到内存,用一个str对象表示。

在读取结束以后需要调用close()方法关闭 。

f = open('/Users/michael/test.txt', 'r')
f.close()

由于文件在读写时可能产生error,一旦出错,后面的f.close()就不会被调用,所以为了保证能够正常关闭文件,可以使用try...finally进行异常处理。

try:
    f = open('/path/to/file', 'r')
     f.read()
finally:
    if f:
        f.close()

也可以使用更简便的的方法with()。该函数不需要调用close()。该函数结构结束以后自动关闭读取。

with open('/path/to/file', 'r') as f:
     line = f.read()
    ...

读取方式:

python的读取方式一共有三种,分别是read()、readline()、readlines()

read():

调用read()会一次性读取文件全部内容, 速度最快,但当数据过大时不适用。

readline():

使用readline()方法,逐行读取内容,返回结果为list。

with open('/path/to/file', 'r') as f:
    line = f.readline()
    while line:
        line = f.readine()  #这里只能读取一行数据
        ...

readlines():

选择使用readlines()方法,一次性读取文本所有内容,返回结果为list,其中每个元素结尾有"\n"。该方法适合读取配置文件,速度较快,但是文本越大占用内存越大。

这种方法读取的文本内容,每行文本末尾都会带一个'\n'换行符 (可以使用L.rstrip('\n')去掉换行符)。注意,python中方法的调用返回的是一个副本,并不会对原有的元素进行修改,如果要修改末尾符号,需要处理赋值给新的字符串。

with open('/path/to/file', 'r') as f:
    line = f.readlines()


for i in line:
    lines.append(i.rstrip('\n'))

优化的处理方式:

通常在数据挖掘中,数据都是有规律的。因此使用迭代的方式进行读取数据是一种很好的兼顾时间和内存的pythonic写法:

split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串,通过split()方法使得read()返回一个字符串。这是最通用的处理方式。

但是,这种方式对格式有严格要求。比如说如果结尾的时候有多个"\n",那么最后几个List元素可能为空。

with open('/path/to/file','r') as f:
   line = f.read().split('\n')

注:文件内容的覆盖追加问题:

一个文件在对象没有关闭之前可以被写多次,每一次都在上一次的末尾追加内容,但是这不是真的写进了文件,而且将内容放在了内存中,在关闭指针以后一次性全部写入。

当关闭指针以后再打开文件,则会从文件的首行开始写,从而覆盖原有内容。

12-16 17:41