python之文件对象

防伪码忘情公子著

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

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

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

概括来讲

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

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

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

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

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

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

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

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

mode指定文件的打开模式

简单模式

r只读

w写入

a附加

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

r+

w+

a+

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

如rb、wb+

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

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

bufsize定义输出缓存

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

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

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

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

文件对象的方法

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

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()方法关闭文件被关闭的文件无法再从中读取数据

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()方法返回文件对象的文件描述符

In [27]: f = open(‘/etc/passwd‘)

In [28]: f.fileno()
Out[28]: 10

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

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()方法以列表模式返回文件所有行

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时将返回一个空字符串

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个字节的位置上

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

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

seek(offset[, whence])

offset指定偏移量

whence指定从哪里开始偏移

0表示从文件头开始偏移

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

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

In [13]: f.tell()
Out[13]: 66

In [14]: f.seek(0)

In [15]: f.tell()
Out[15]: 0

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

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

例读取10个字节

In [16]: f.read(10)
Out[16]: ‘fadjlfjdak‘

In [17]: f.tell()
Out[17]: 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属性直接调用当前文件的全路径名称

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学习成长记录。

时间: 2024-12-28 16:29:58

python之文件对象的相关文章

python 将文件描述符包装成文件对象

有一个对应于操作系统上一个已打开的I/O 通道(比如文件.管道.套接字等)的整型文件描述符,你想将它包装成一个更高层的Python 文件对象. 一个文件描述符和一个打开的普通文件是不一样的.文件描述符仅仅是一个由操作系统指定的整数,用来指代某个系统的I/O 通道.如果你碰巧有这么一个文件描述符,你可以通过使用open() 函数来将其包装为一个Python 的文件对象.仅仅只需要使用这个整数值的文件描述符作为第一个参数来代替文件名即可 import os fd = os.open('somefil

python读取文件小结

python读取文件小结 你想通过python从文件中读取文本或数据. 一.最方便的方法是一次性读取文件中的所有内容并放置到一个大字符串中: all_the_text = open('thefile.txt').read( )     # 文本文件中的所有文本 all_the_data = open('abinfile','rb').read( )    # 二进制文件中的所有数据 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用的文件对象占用

Python基础 - 文件处理(上)

读写文件, 文件备份, 上传资料这些操作应该是大家日常工作中每天都要做的事情. 而文件呢, 又有不同的类型(后缀名), 比如 .txt, .xls, .xlsx, .csv, .json, .sql .... 等等各种文件. 在我日常的数据工作中, 读取文件数据, 处理, 写入文件这样的操作几乎是每天都要做的事情. 我们的从编程入门的角度来讲, 文件处理算是一个最能快速应用到工作的了. 尤其是 不同编程的小伙伴, 如果要是学会了文件处理, 那绝对能大幅度提高工作效率的. 突然想吐槽一下 文件处理

Python中常见的文件对象内建函数

文件对象内建方法列表 文件对象的方法 操作 file.close() 关闭文件 file.fileno() 返回文件的描述符(file descriptor,FD,整数值) file.flush() 刷新文件的内部缓冲区 file.isatty() 判断file是否是一个类设tty备 file.next() 返回文件的下一行,或在没有其它行时引发StopIteration异常 file.read(size=-1) 从文件读取size个字节,当未给定size或给定负值时读取剩余的所有字节,然后作为

Python——os(二)文件对象

本节介绍 os 模块创建 file 对象的函数 os.fdopen(fd[, mode[, bufsize]]) 用文件描述符打开文件,返回一个连接到 fd 的打开的文件对象,参数 mode 和 bufsize 与Python内置函数 open() 的对应参数含义相同,如果 fdopen() 抛出异常, fd 对应的文件处于未关闭的状态. 适用于: Unix, Windows. Changed in version 2.3: 如果指定了参数 mode ,那么该参数必须以'r'.'w'或'a'之一

Python 五、Python文件对象

一.文件系统和文件 1.文件系统和文件 文件系统是OS用于明确磁盘或分区上的文件的方法和数据结构--即在磁盘上组织文件的方法 计算机文件(或称文件.电脑档案.档案),是存储在某种长期储存设备或临时存储设备中的一段数据流,并且归属于计算机文件系统管理之下 概括来讲: 文件是计算机中由OS管理的具有名字的存储区域 在Linux系统上,文件被看做是字节序列 2.linux文件系统组件的体系结构 3.Python打开文件 Python内置函数open()用于打开文件和创建文件对象 语法格式: open(

Python自动化运维之4、文件对象

python文件对象 文件系统和文件: 文件系统是OS用于明确磁盘或分区上的文件的方法和数据结构--即在磁盘上组织文件的方法 计算机文件(或称文件.电脑档案.档案)是存储在某种长期存储设备或临时存储设备中的一段数据流,并且归属于计算机文件系统管理之下 概括来讲: 文件是计算机中由OS管理的具有名字的存储区域 在Linux系统上,文件被看作是字节序列 batyes()这个内置函数,这个方法是将字符串转换为字节类型 # utf-8 一个汉子:3个字节 # gbk一个汉子:2个字节, 1bytes =

Python 学习之文件对象的属性和方法简介

python的文件处理和相关输入输出能力.介绍文件对象(它的内建函数,内建方法和属性),标准文件,同时讨论文件系统的访问方法,文件执行,以及相关文件模块. 一.内建函数open 语法:file_object = open(file_name,access_mode='r',buffering=-1) file_name    要打开的绝对路径或者相对路径文件名 access_mode    处理文件的模式,常规的模式有r.w.a.r+.w+.a+.其中r模式的前提是系统本身存在该文件,读取模式.

Python之code对象与pyc文件(三)

上一节:Python之code对象与pyc文件(二) 向pyc写入字符串 在了解Python如何将字符串写入到pyc文件的机制之前,我们先来了解一下结构体WFILE: marshal.c typedef struct { FILE *fp; int error; int depth; /* If fp == NULL, the following are valid: */ PyObject *str; char *ptr; char *end; PyObject *strings; /* di