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,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
22天前
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
126 69
|
10天前
|
Python
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
56 15
|
4天前
|
Shell 开发者 Docker
Python文件打包:一站式指南
本文深入探讨Python文件打包的各种方法,从基础的zip和tar工具到高级的setuptools、PyInstaller、cx_Freeze等,涵盖Docker镜像、虚拟环境及自包含可执行文件的打包方式。通过示例代码与详细解析,帮助开发者根据项目需求选择合适的打包方案,提升代码分发与部署效率。内容全面,适合各水平读者学习参考。
|
10天前
|
安全 测试技术 开发者
Python中的“空”:对象的判断与比较
在Python开发中,判断对象是否为“空”是常见操作,但其中暗藏诸多细节与误区。本文系统梳理了Python中“空”的判定逻辑,涵盖None类型、空容器、零值及自定义对象的“假值”状态,并对比不同判定方法的适用场景与性能。通过解析常见误区(如混用`==`和`is`、误判合法值等)及进阶技巧(类型安全检查、自定义对象逻辑、抽象基类兼容性等),帮助开发者准确区分各类“空”值,避免逻辑错误,同时优化代码性能与健壮性。掌握这些内容,能让开发者更深刻理解Python的对象模型与业务语义交集,从而选择最适合的判定策略。
29 5
|
23天前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
42 11
|
1月前
|
存储 算法 文件存储
探秘文件共享服务之哈希表助力 Python 算法实现
在数字化时代,文件共享服务不可或缺。哈希表(散列表)通过键值对存储数据,利用哈希函数将键映射到特定位置,极大提升文件上传、下载和搜索效率。例如,在大型文件共享平台中,文件名等信息作为键,物理地址作为值存入哈希表,用户检索时快速定位文件,减少遍历时间。此外,哈希表还用于文件一致性校验,确保传输文件未被篡改。以Python代码示例展示基于哈希表的文件索引实现,模拟文件共享服务的文件索引构建与检索功能。哈希表及其分布式变体如一致性哈希算法,保障文件均匀分布和负载均衡,持续优化文件共享服务性能。
|
3月前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
85 20
|
3月前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
119 8
|
3月前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
105 4

热门文章

最新文章

下一篇
oss创建bucket