首页 > 代码库 > python3_05.文件操作那些事

python3_05.文件操作那些事

文件操作的学习笔记。

>>> file = open(‘/tmp/test.txt‘,‘r‘)

>>> file.read()

‘root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/var/adm:/sbin/nologin\nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\nsync:x:5:0:sync:/sbin:/bin/sync\nmysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash\n‘

>>> file.close()  #文件使用完以后要关闭文件,因为文件会占用资源

>>> with open(‘/tmp/test.txt‘,‘r‘) as f:

...     print(f.read())

...    #with语句自动调用了close方法

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash


read() 一次性读取所有内容,文件过大,内存容易出问题

read(size) size指定每次最多读取的字节数,更安全

readline()  每次读取一行

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

#f = open(‘/Users/michael/gbk.txt‘, ‘r‘, encoding=‘gbk‘, errors=‘ignore‘, newline=‘‘)

open可以传入一些参数:

encoding:指定编码

errors:处理错误的方式,最简单的是ignore忽略,但是这样用多了不太好。

newline=‘‘:Python可以识别所有的普通换行符并将其转换为单个 \n 字符。 类似的,在输出时会将换行符 \n 转换为系统默认的换行符。 如果你不希望这种默认的处理方式,可以给 open() 函数传入参数 newline=‘‘ 


>>> with open(‘/tmp/hello.txt‘,‘w‘) as f:

...     f.write(‘hello‘)              #文件写入

...     print(‘你好‘,file=f)   #print输入重定向到文件中

...

>>> file.read()

‘hello你好\n‘


#-- 文件基本操作

   output = open(r‘C:\spam‘, ‘w‘)          # 打开输出文件,用于写

   input = open(‘data‘, ‘r‘)               # 打开输入文件,用于读。打开的方式可以为‘w‘, ‘r‘, ‘a‘, ‘wb‘, ‘rb‘, ‘ab‘等

   fp.read([size])                         # size为读取的长度,以byte为单位

   fp.readline([size])                     # 读一行,如果定义了size,有可能返回的只是一行的一部分

   fp.readlines([size])                    # 把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长。

   fp.readable()                           # 是否可读

   fp.write(str)                           # 把str写到文件中,write()并不会在str后加上一个换行符

   fp.writelines(seq)                      # 把seq的内容全部写到文件中(多行一次性写入)

   fp.writeable()                          # 是否可写

   fp.close()                              # 关闭文件。

   fp.flush()                              # 把缓冲区的内容写入硬盘

   fp.fileno()                             # 返回一个长整型的”文件标签“

   fp.isatty()                             # 文件是否是一个终端设备文件(unix系统中的)

   fp.tell()                               # 返回文件操作标记的当前位置,以文件的开头为原点

   fp.next()                               # 返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

   fp.seek(offset[,whence])                # 将文件打操作标记移到offset的位置。whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。

   fp.seekable()                           # 是否可以seek

   fp.truncate([size])                     # 把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。

   for line in open(‘data‘):

       print(line)                       # 使用for语句,比较适用于打开比较大的文件

   open(‘f.txt‘, encoding = ‘latin-1‘)     # Python3.x Unicode文本文件


本文出自 “拔电源的运维空间” 博客,请务必保留此出处http://zhangdj.blog.51cto.com/9210512/1881951

python3_05.文件操作那些事