File Object

File Attributes

Attribute Description
name 返回文件对象所打开的文件
encoding 返回文档对象解码字符集(text mode)
buffer 返回buffer对象的名称
line_buffering 是否使用line_buffering
newlines 返回默认的换行符
errors 返回errors模式(text mode)
closed 返回文件对象是否关闭

File Method

Method Description
close() 关闭文件对象,关闭后无法读写
flush() 将文件对象中buffer的数据刷盘
read([size]) 读取数据(text模式按字符读,binary模式按字节读)
readable() 是否可读
readline([size]) 读取一行(text mode)
readlines() 读取所有行,并以list形式返回(text mode)
write() 写入数据
writable() 是否可写
writelines() 循环可迭代对象写入数据(text mode)
tell() 返回当前文件指针偏移量
seek() 移动文件指针偏移量
seekable() 是否可以移动指针偏移量
fileno() 返回文件描述符
isatty() 是否连接到类tty设备上
truncate() 清空文件

什么是文件描述符

不说太多,看就行了。

In [1]: f=open('utf8.txt','r')

In [2]: f.fileno()
Out[2]: 8
root@e838f7c0573b:/# ps aux|grep python
root        24  1.9  2.1 174572 21900 ?        Ssl+ 02:27   0:00 /usr/local/bin/python3.4 /usr/local/bin/ipython
root        34  0.0  0.0  12808   968 ?        S+   02:27   0:00 grep python
root@e838f7c0573b:/# ls /proc/24/
attr/            cwd/             loginuid         numa_maps        schedstat        task/
autogroup        environ          map_files/       oom_adj          sessionid        timers
auxv             exe              maps             oom_score        setgroups        uid_map
cgroup           fd/              mem              oom_score_adj    smaps            wchan
clear_refs       fdinfo/          mountinfo        pagemap          stack            
cmdline          gid_map          mounts           personality      stat             
comm             io               mountstats       projid_map       statm            
coredump_filter  latency          net/             root/            status           
cpuset           limits           ns/              sched            syscall          
root@e838f7c0573b:/# ls /proc/24/fd/
0  1  2  3  4  5  6  8  
root@e838f7c0573b:/# file /proc/24/fd/8 
/proc/24/fd/8: symbolic link to /utf8.txt
root@e838f7c0573b:/# cat /proc/24/fd/8 
I am Da
I am Da

可以看到,进程在打开一个打开文件后,会在系统的/proc/pid/fd/下,新建一个fileno为8的文件描述符,这个文件描述符只是一个软连接,链接到我们进程所打开的文件

In [3]: f.close()
root@e838f7c0573b:/# cat /proc/24/fd/8 
cat: /proc/24/fd/8: No such file or directory

而这个文件会在文件对象lose()删除

results matching ""

    No results matching ""