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()删除