python之文件对象

简介:

文件对象是用来访问文件系统接口所对应的数据的

文件系统是OS用于明确磁盘或分区上的文件的方法和数据结构—即在磁盘上组织文件的方法

计算机文件或称文件、电脑档案、档案是存储在某种长期储存设备或临时存储设备中的一段数据流并且归属于计算机文件系统管理之下

概括来讲

        文件是计算机中由OS管理的具有名字的存储区域

        在Linux系统上文件被看做是字节序列

wKiom1hU9w-jYLj5AAC2K7fvLZ8039.png


要想把数据存储到文件中有一个前提那就是必须序列化,非序列化的数据是不能简单的存储在文件系统中的文件中的


对于python来说文件对象不仅可以用来访问普通的磁盘文件此外在Linux中的一些特殊文件比如套接字文件、命名管道等等也都可以通过文件的对象接口来进行访问。


对于python而言要想实现创建文件对象就要使用python的内置函数open()来完成。

python的内置函数open()用于打开文件和创建文件对象其使用方法如下

1
open (name [,mode [,bufsize]])

open函数可以接收三个参数文件名、模式和缓冲区参数。open函数返回的是一个文件对象

 mode指定文件的打开模式

     简单模式

       r只读

       w写入

       a附加

     在模式后使用“+”表示同时支持输入、输出操作

       r+

       w+

       a+

     在模式后附加“b”表示以二进制方式打开

       如rb、wb+

     当以可写模式打开文件时若文件不存在则会创建该文件

     当以只读模式打开文件时若文件不存在则会发出异常

  bufsize定义输出缓存

   0表示无输出缓存禁用缓冲

   1表示使用缓冲只缓冲一行数据

   负数表示使用系统默认设置使用系统默认缓冲

   正数表示使用近似指定大小的缓冲指定缓冲空间大小


文件对象的方法

file.next()方法 以迭代方式获取文件的所有行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
In [ 1 ]: f  =  open ( '/etc/passwd' )
 
In [ 2 ]: f. next ()
Out[ 2 ]:  '##\n'
 
In [ 3 ]: f. next ()
Out[ 3 ]:  '# User Database\n'
 
In [ 4 ]: f. next ()
Out[ 4 ]:  '# \n'
 
In [ 5 ]: f. next ()
Out[ 5 ]:  '# Note that this file is consulted directly only when the system is running\n'
 
In [ 6 ]: f. next ()
Out[ 6 ]:  '# in single-user mode.  At other times this information is provided by\n'
 
In [ 7 ]: f. next ()
Out[ 7 ]:  '# Open Directory.\n'
 
In [ 8 ]: f. next ()
Out[ 8 ]:  '#\n'
 
In [ 9 ]: f. next ()
Out[ 9 ]:  '# See the opendirectoryd(8) man page for additional information about\n'
 
In [ 10 ]: f. next ()
Out[ 10 ]:  '# Open Directory.\n'
 
In [ 11 ]: f. next ()
Out[ 11 ]:  '##\n'
 
In [ 12 ]: f. next ()
Out[ 12 ]:  'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false\n'
 
In [ 13 ]: f. next ()
Out[ 13 ]:  'root:*:0:0:System Administrator:/var/root:/bin/sh\n'
 
In [ 14 ]: f. next ()
Out[ 14 ]:  'daemon:*:1:1:System Services:/var/root:/usr/bin/false\n'
 
In [ 15 ]: f. next ()
Out[ 15 ]:  '_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico\n'


file.close()方法关闭文件被关闭的文件无法再从中读取数据

1
2
3
4
5
6
7
8
9
In [ 24 ]: f.close()
 
In [ 25 ]: f. next ()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ValueError                                Traceback (most recent call last)
<ipython - input - 25 - c3e65e5362fb>  in  <module>()
- - - - 1  f. next ()
 
ValueError: I / O operation on closed  file


file.fileno()方法返回文件对象的文件描述符

1
2
3
4
In [ 27 ]: f  =  open ( '/etc/passwd' )
 
In [ 28 ]: f.fileno()
Out[ 28 ]:  10


file.readline()方法执行一次返回一行

1
2
3
4
5
6
7
8
9
10
In [ 30 ]: f  =  open ( '/etc/passwd' )
 
In [ 31 ]: f.readline()
Out[ 31 ]:  '##\n'
 
In [ 32 ]: f.readline()
Out[ 32 ]:  '# User Database\n'
 
In [ 33 ]: f.readline()
Out[ 33 ]:  '# \n'


file.readlines()方法以列表模式返回文件所有行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
In [ 34 ]: f  =  open ( '/etc/passwd' )
 
In [ 35 ]: f.readlines()
Out[ 35 ]:
[ '##\n' ,
  '# User Database\n' ,
  '# \n' ,
  '# Note that this file is consulted directly only when the system is running\n' ,
  '# in single-user mode.  At other times this information is provided by\n' ,
  '# Open Directory.\n' ,
  '#\n' ,
  '# See the opendirectoryd(8) man page for additional information about\n' ,
  '# Open Directory.\n' ,
  '##\n' ,
  'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false\n' ,
  'root:*:0:0:System Administrator:/var/root:/bin/sh\n' ,
  'daemon:*:1:1:System Services:/var/root:/usr/bin/false\n' ,
  '_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico\n' ,
  '_taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false\n' ,
  '_networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false\n' ,
  '_installassistant:*:25:25:Install Assistant:/var/empty:/usr/bin/false\n' ,
  '_lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false\n' ,
  '_postfix:*:27:27:Postfix Mail Server:/var/spool/postfix:/usr/bin/false\n' ,
  '_scsd:*:31:31:Service Configuration Service:/var/empty:/usr/bin/false\n' ,
  '_ces:*:32:32:Certificate Enrollment Service:/var/empty:/usr/bin/false\n' ,
  '_mcxalr:*:54:54:MCX AppLaunch:/var/empty:/usr/bin/false\n' ,
  '_appleevents:*:55:55:AppleEvents Daemon:/var/empty:/usr/bin/false\n' ,
  '_geod:*:56:56:Geo Services Daemon:/var/db/geod:/usr/bin/false\n' ,
  '_serialnumberd:*:58:58:Serial Number Daemon:/var/empty:/usr/bin/false\n' ,
  '_devdocs:*:59:59:Developer Documentation:/var/empty:/usr/bin/false\n' ,
  '_sandbox:*:60:60:Seatbelt:/var/empty:/usr/bin/false\n' ,
  '_mdnsresponder:*:65:65:mDNSResponder:/var/empty:/usr/bin/false\n' ,
  '_ard:*:67:67:Apple Remote Desktop:/var/empty:/usr/bin/false\n' ,
  '_www:*:70:70:World Wide Web Server:/Library/WebServer:/usr/bin/false\n' ,
  '_eppc:*:71:71:Apple Events User:/var/empty:/usr/bin/false\n' ,
  '_cvs:*:72:72:CVS Server:/var/empty:/usr/bin/false\n' ,
  '_svn:*:73:73:SVN Server:/var/empty:/usr/bin/false\n' ,
  '_mysql:*:74:74:MySQL Server:/var/empty:/usr/bin/false\n' ,
  '_sshd:*:75:75:sshd Privilege separation:/var/empty:/usr/bin/false\n' ,
  '_qtss:*:76:76:QuickTime Streaming Server:/var/empty:/usr/bin/false\n' ,
  '_cyrus:*:77:6:Cyrus Administrator:/var/imap:/usr/bin/false\n' ,
  '_mailman:*:78:78:Mailman List Server:/var/empty:/usr/bin/false\n' ,
  '_appserver:*:79:79:Application Server:/var/empty:/usr/bin/false\n' ,
  '_clamav:*:82:82:ClamAV Daemon:/var/virusmails:/usr/bin/false\n' ,
  '_amavisd:*:83:83:AMaViS Daemon:/var/virusmails:/usr/bin/false\n' ,
  '_jabber:*:84:84:Jabber XMPP Server:/var/empty:/usr/bin/false\n' ,
  '_appowner:*:87:87:Application Owner:/var/empty:/usr/bin/false\n' ,
  '_windowserver:*:88:88:WindowServer:/var/empty:/usr/bin/false\n' ,
  '_spotlight:*:89:89:Spotlight:/var/empty:/usr/bin/false\n' ,
  '_tokend:*:91:91:Token Daemon:/var/empty:/usr/bin/false\n' ,
  '_securityagent:*:92:92:SecurityAgent:/var/db/securityagent:/usr/bin/false\n' ,
  '_calendar:*:93:93:Calendar:/var/empty:/usr/bin/false\n' ,
  '_teamsserver:*:94:94:TeamsServer:/var/teamsserver:/usr/bin/false\n' ,
  '_update_sharing:*:95:-2:Update Sharing:/var/empty:/usr/bin/false\n' ,
  '_installer:*:96:-2:Installer:/var/empty:/usr/bin/false\n' ,
  '_atsserver:*:97:97:ATS Server:/var/empty:/usr/bin/false\n' ,
  '_ftp:*:98:-2:FTP Daemon:/var/empty:/usr/bin/false\n' ,
  '_unknown:*:99:99:Unknown User:/var/empty:/usr/bin/false\n' ,
  '_softwareupdate:*:200:200:Software Update Service:/var/empty:/usr/bin/false\n' ,
  '_coreaudiod:*:202:202:Core Audio Daemon:/var/empty:/usr/bin/false\n' ,
  '_screensaver:*:203:203:Screensaver:/var/empty:/usr/bin/false\n' ,
  '_locationd:*:205:205:Location Daemon:/var/db/locationd:/usr/bin/false\n' ,
  '_trustevaluationagent:*:208:208:Trust Evaluation Agent:/var/empty:/usr/bin/false\n' ,
  '_timezone:*:210:210:AutoTimeZoneDaemon:/var/empty:/usr/bin/false\n' ,
  '_lda:*:211:211:Local Delivery Agent:/var/empty:/usr/bin/false\n' ,
  '_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false\n' ,
  '_usbmuxd:*:213:213:iPhone OS Device Helper:/var/db/lockdown:/usr/bin/false\n' ,
  '_dovecot:*:214:6:Dovecot Administrator:/var/empty:/usr/bin/false\n' ,
  '_dpaudio:*:215:215:DP Audio:/var/empty:/usr/bin/false\n' ,
  '_postgres:*:216:216:PostgreSQL Server:/var/empty:/usr/bin/false\n' ,
  '_krbtgt:*:217:-2:Kerberos Ticket Granting Ticket:/var/empty:/usr/bin/false\n' ,
  '_kadmin_admin:*:218:-2:Kerberos Admin Service:/var/empty:/usr/bin/false\n' ,
  '_kadmin_changepw:*:219:-2:Kerberos Change Password Service:/var/empty:/usr/bin/false\n' ,
  '_devicemgr:*:220:220:Device Management Server:/var/empty:/usr/bin/false\n' ,
  '_webauthserver:*:221:221:Web Auth Server:/var/empty:/usr/bin/false\n' ,
  '_netbios:*:222:222:NetBIOS:/var/empty:/usr/bin/false\n' ,
  '_warmd:*:224:224:Warm Daemon:/var/empty:/usr/bin/false\n' ,
  '_dovenull:*:227:227:Dovecot Authentication:/var/empty:/usr/bin/false\n' ,
  '_netstatistics:*:228:228:Network Statistics Daemon:/var/empty:/usr/bin/false\n' ,
  '_avbdeviced:*:229:-2:Ethernet AVB Device Daemon:/var/empty:/usr/bin/false\n' ,
  '_krb_krbtgt:*:230:-2:Open Directory Kerberos Ticket Granting Ticket:/var/empty:/usr/bin/false\n' ,
  '_krb_kadmin:*:231:-2:Open Directory Kerberos Admin Service:/var/empty:/usr/bin/false\n' ,
  '_krb_changepw:*:232:-2:Open Directory Kerberos Change Password Service:/var/empty:/usr/bin/false\n' ,
  '_krb_kerberos:*:233:-2:Open Directory Kerberos:/var/empty:/usr/bin/false\n' ,
  '_krb_anonymous:*:234:-2:Open Directory Kerberos Anonymous:/var/empty:/usr/bin/false\n' ,
  '_assetcache:*:235:235:Asset Cache Service:/var/empty:/usr/bin/false\n' ,
  '_coremediaiod:*:236:236:Core Media IO Daemon:/var/empty:/usr/bin/false\n' ,
  '_launchservicesd:*:239:239:_launchservicesd:/var/empty:/usr/bin/false\n' ,
  '_iconservices:*:240:240:IconServices:/var/empty:/usr/bin/false\n' ,
  '_distnote:*:241:241:DistNote:/var/empty:/usr/bin/false\n' ,
  '_nsurlsessiond:*:242:242:NSURLSession Daemon:/var/db/nsurlsessiond:/usr/bin/false\n' ,
  '_nsurlstoraged:*:243:243:NSURLStorage Daemon:/var/empty:/usr/bin/false\n' ,
  '_displaypolicyd:*:244:244:Display Policy Daemon:/var/empty:/usr/bin/false\n' ,
  '_astris:*:245:245:Astris Services:/var/db/astris:/usr/bin/false\n' ,
  '_krbfast:*:246:-2:Kerberos FAST Account:/var/empty:/usr/bin/false\n' ,
  '_gamecontrollerd:*:247:247:Game Controller Daemon:/var/empty:/usr/bin/false\n' ,
  '_mbsetupuser:*:248:248:Setup User:/var/setup:/bin/bash\n' ,
  '_ondemand:*:249:249:On Demand Resource Daemon:/var/db/ondemand:/usr/bin/false\n' ,
  '_xserverdocs:*:251:251:OS X Server Documents Service:/var/empty:/usr/bin/false\n' ,
  '_wwwproxy:*:252:252:WWW Proxy:/var/empty:/usr/bin/false\n' ]

由于readlines是一次性获取所有行若文件数据特别多将会极其占用内存资源所以一般不用readlines如果需要读取文件所有行可以使用readline进行迭代获取

当readline读取到文件末尾时再执行readline时将返回一个空字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
In [ 1 ]: f  =  open ( '/Users/seancheng/aa.txt' )
 
In [ 2 ]: f.readline()
Out[ 2 ]:  'fadjlfjdakf\n'
 
In [ 3 ]: f.readline()
Out[ 3 ]:  '213242345\n'
 
In [ 4 ]: f.readline()
Out[ 4 ]:  'fjdagu8908fa\n'
 
In [ 5 ]: f.readline()
Out[ 5 ]:  'fdaf343435\n'
 
In [ 6 ]: f.readline()
Out[ 6 ]:  'fadgjljl;8\n'
 
In [ 7 ]: f.readline()
Out[ 7 ]:  'fjadljg5\n'
 
In [ 8 ]: f.readline()
Out[ 8 ]: ''
 
In [ 9 ]: f.readline()
Out[ 9 ]: ''


file.tell()方法返回当前指针在文件中的位置。以字节为单位如下表示指针在第66个字节的位置上

1
2
In [ 10 ]: f.tell()
Out[ 10 ]:  66


file.seek()方法定义文件指针的位置其使用方法如下

1
seek(offset[, whence])

offset指定偏移量

whence指定从哪里开始偏移

        0表示从文件头开始偏移

        1表示从当前位置开始偏移

        2表示从文件尾部开始偏移

1
2
3
4
5
6
7
In [ 13 ]: f.tell()
Out[ 13 ]:  66
 
In [ 14 ]: f.seek( 0 )
 
In [ 15 ]: f.tell()
Out[ 15 ]:  0

如上所示若不给whence的话默认的从文件头开始偏移


file.read()方法明确指定从文件中指定要读取多少个字节结果返回成一个字符串

例读取10个字节

1
2
3
4
5
In [ 16 ]: f.read( 10 )
Out[ 16 ]:  'fadjlfjdak'
 
In [ 17 ]: f.tell()
Out[ 17 ]:  10

当不指定字节数时将读取整个文件

1
2
3
4
5
6
7
8
9
10
In [ 1 ]: f  =  open ( '/Users/seancheng/aa.txt' )
 
In [ 2 ]: f.tell()
Out[ 2 ]:  0
 
In [ 3 ]: f.read()
Out[ 3 ]:  'fadjlfjdakf\n213242345\nfjdagu8908fa\nfdaf343435\nfadgjljl;8\nfjadljg5\n'
 
In [ 4 ]: f.tell()
Out[ 4 ]:  66


file.name属性直接调用当前文件的全路径名称

1
2
In [ 6 ]: f.name
Out[ 6 ]:  '/Users/seancheng/aa.txt'


file.write(s)写入字符串s

file.writelines(lines)写入序列lines中的所有字符串只能将字符串序列写入到文件中

file.flush()刷新缓冲区手动同步数据到磁盘中

file.truncate([size])将文件截断为最多size字节也就是说文件被截取后只剩下size字节

file.closed返回当前文件是否为关闭状态

file.encoding返回当前文件使用的编码

file.mode返回当前文件的打开模式


这就是python中的文件对象仅以此篇作为python学习成长记录。










本文转自 忘情OK  51CTO博客,原文链接:http://blog.51cto.com/itchentao/1883617,如需转载请自行联系原作者
目录
相关文章
|
16天前
|
Python
【python】python跨文件使用全局变量
【python】python跨文件使用全局变量
|
24天前
|
监控 数据处理 索引
使用Python批量实现文件夹下所有Excel文件的第二张表合并
使用Python和pandas批量合并文件夹中所有Excel文件的第二张表,通过os库遍历文件,pandas的read_excel读取表,concat函数合并数据。主要步骤包括:1) 遍历获取Excel文件,2) 读取第二张表,3) 合并所有表格,最后将结果保存为新的Excel文件。注意文件路径、表格结构一致性及异常处理。可扩展为动态指定合并表、优化性能、日志记录等功能。适合数据处理初学者提升自动化处理技能。
21 1
|
29天前
|
存储 并行计算 Java
Python读取.nc文件的方法与技术详解
本文介绍了Python中读取.nc(NetCDF)文件的两种方法:使用netCDF4和xarray库。netCDF4库通过`Dataset`函数打开文件,`variables`属性获取变量,再通过字典键读取数据。xarray库利用`open_dataset`打开文件,直接通过变量名访问数据。文中还涉及性能优化,如分块读取、使用Dask进行并行计算以及仅加载所需变量。注意文件路径、变量命名和数据类型,读取后记得关闭文件(netCDF4需显式关闭)。随着科学数据的增长,掌握高效处理.nc文件的技能至关重要。
105 0
|
1月前
|
Python
python中文件和异常处理方法(二)
python中文件和异常处理方法(二)
13 0
|
1月前
|
Python
python中文件和异常处理方法(一)
python中文件和异常处理方法(一)
29 0
|
1月前
|
Python
python中文件和异常处理方法(三)
python中文件和异常处理方法(三)
19 0
|
2天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
22 0
|
3天前
|
Python
python学习12-类对象和实例对象
python学习12-类对象和实例对象
|
16天前
|
C++ Python
【C++/Python】C++调用python文件
【C++/Python】C++调用python文件
|
16天前
|
JSON 数据处理 数据格式
Python中的文件读写操作详解
【4月更文挑战第2天】在Python中,文件读写操作是数据处理和程序开发的重要部分。通过文件,我们可以将信息持久化地保存在磁盘上,并在需要时读取和使用这些数据。Python提供了丰富的内置函数和模块,使得文件读写变得简单而高效。本文将详细介绍Python中文件读写的基本操作和常用方法。

热门文章

最新文章