文件处理

文件操作


fp = open("test.txt",w)     直接打开一个文件,如果文件不存在则创建文件

##        形式一:
with open("test.txt","w") as fp:
    print(pf.write())

  ##这里就不需要加 fp.close()了,自动会关闭的。

##     形式二:
fp = open("test.txt","w") print(fp.write())
pf.close()    ##注意:一定要手动关闭,不然内存资源会一直被占用


  • 读模式

r    只读模式,必须打开一个已有的文件,且只能执行读操作。

r+  读+追加模式,可读可写,与‘r’相同之处在于也是必须打开一个已有的文件,不同的是它可写可读,而且写与读不分先后,即随时都可进行读与写。(写为追加在文件末尾)

读模式的功能:

#####################################    r模式代码实现
fp = open('test','r',encoding='utf8') print(fp.read(1)) ##size为一个字节的单位 print(fp.tell()) ## 当前指针的位置 print(fp.readline())

print(fp.readlines(1))    ##  返回的是一个列表,列表里的一个元素代表一行
###########################  运行结果:
1
# 2 #3 3 #是一个test文件0
4 #['这是一个test文件1 ']
##########################################  r+模式代码实现
fp = open('test','r+',encoding='utf8')
fp.write('这是新加write ')    ##  这里write会写在末尾
print(fp.readline()) print(fp.tell()) fp.write('新加进去的 ')  ##  write会在末尾追加 print(fp.read()) ## 这里指针会放在最后面
1 ################            运行结果:
2 #这是一个test文件2
3 #
4 #25
  •  写模式

w  只写模式,打开即默认创建一个新的空文件,当然若打开的是已有文件,则清空文件,且只能执行写操作。

w+   写读模式,打开创建新文件,因此需要先把内容写进去在读。即保证文件有内容通过移动光标来读自己想要的部分。

###########    w模式:
fp = open('test','w',encoding='utf8')
fp.write('这是一个新建的write文件 ')    ##  write会覆盖原有内容
fp.writelines(['writeline%d '%i for i in range(10)])  写入一个列表
#########        w+模式:
fp = open('test','w+',encoding='utf8')
print(fp.readline())    ##    运行结果为空,当用r或者r+模式代开一个文件时,会将这个文件的内容清空
fp.write('这是一个新建的write文件
')
print(fp.read())    ##    运行结果为空,指针放在上一次写入的位置
  • 追加模式

a   追加模式,若打开的是已有文件则直接对已有文件操作,若打开文件不存在则创建新文件,只能执行写(追加在后面),不能读。即追加写。

a+    追加读写模式,打开文件方式同‘a’一样,写方式也和'a'一样,但是可以读。且是任意时刻读写。需要注意的是你若刚用‘a+’打开一个文件,则不能立即读,因为此时光标已经是文件末尾,除非你把光标移动到初始位置或任意非末尾的位置。

###########        a模式:
fp = open('test','a',encoding='utf8')
fp.write('这是一个新建的a.write()文件')    ##  和w模式的区别在于:a模式会追加到文件末尾,不会覆盖文件的内容  
print(fp.read())    ##    这里会报错,a模式只能写不能读
##########        a+模式:

fp = open('test','a+',encoding='utf8')
print(fp.read())    ##  用a+打开一个文件,会默认将指针放在末尾,所以这里打印为空
fp.seek(0)
print(fp.readline())
fp.write('
这是一个a+.write()文件
')
  • b模式

rb     以二进制读模式打开
wb     以二进制写模式打开 (参见 w )
ab     以二进制追加模式打开 (参见 a )
rb+    以二进制读写模式打开 (参见 r+ )
wb+    以二进制读写模式打开 (参见 w+ )
ab+    以二进制读写模式打开 (参见 a+ )

 

#############    b模式:
fp = open('test','rb')
print(fp.readline())
#########    运行结果:
b'xe8xbfx99xe6x98xafxe4xb8x80xe4xb8xaaxe6x96xb0xe5xbbxbaxe7x9ax84writexe6x96x87xe4xbbxb6
'
###    打印出的结果是一个二进制
  • 常用的函数

fp.read([size])                     size为读取的长度,以byte为单位

fp.readline([size])                 读一行,如果定义了size,有可能返回的只是一行的一部分

fp.readlines([size])                把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。

fp.write(str)                      #把str写到文件中,write()并不会在str后加上一个换行符

fp.writelines(seq)            #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。

fp.close()                        #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError

fp.flush()                                      #把缓冲区的内容写入硬盘

fp.fileno()                                      #返回一个长整型的”文件标签“

fp.isatty()                                      #文件是否是一个终端设备文件(unix系统中的)

fp.tell()                                         #返回文件操作标记的当前位置,以文件的开头为原点

fp.next()                                       #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

fp.seek(offset[,whence])              #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

fp.truncate([size])                       #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

 

原文地址:https://www.cnblogs.com/maoxinjueluo/p/12550424.html