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,其中每个元素结尾有" "。该方法适合读取配置文件,速度较快,但是文本越大占用内存越大。
这种方法读取的文本内容,每行文本末尾都会带一个' '换行符 (可以使用L.rstrip(' ')去掉换行符)。注意,python中方法的调用返回的是一个副本,并不会对原有的元素进行修改,如果要修改末尾符号,需要处理赋值给新的字符串。
with open('/path/to/file', 'r') as f: line = f.readlines() for i in line: lines.append(i.rstrip(' '))
优化的处理方式:
通常在数据挖掘中,数据都是有规律的。因此使用迭代的方式进行读取数据是一种很好的兼顾时间和内存的pythonic写法:
split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串,通过split()方法使得read()返回一个字符串。这是最通用的处理方式。
但是,这种方式对格式有严格要求。比如说如果结尾的时候有多个" ",那么最后几个List元素可能为空。
with open('/path/to/file','r') as f: line = f.read().split(' ')
注:文件内容的覆盖追加问题:
一个文件在对象没有关闭之前可以被写多次,每一次都在上一次的末尾追加内容,但是这不是真的写进了文件,而且将内容放在了内存中,在关闭指针以后一次性全部写入。
当关闭指针以后再打开文件,则会从文件的首行开始写,从而覆盖原有内容。