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