python-文件操作

1、打开文件  f=open('XX',encoding='utf-8')    #python字符集为unicode, encoding='utf-8' 避免发生错误

  打开的三种方式:r读、w写和a追加

  open()      第二参数为打开方式,默认为读

  open('XX','w',encoding='utf-8')   w读模式,会清除原有文件内容,w模式 可以写入,不能读即不能f.read()

  open('XX','w+',encoding='utf-8')    w+ 写读模式,文件不存在不会报错,会清空原有文件内容,可读、可写 

  open('XX','r',encoding='utf-8')    r只读模式,文件不存在会报错,可以读,但是不能写入,文件指针在最后

  open('XX','r+',encoding='utf-8')    r+,读写模式,,文件不存在打开会报错,可读、可写

  open('XX','a',encoding='utf-8')     a追加模式,文件不存在时不报错,可以写入,且不清空之前内容,但是不能读取

  open('XX','a+',encoding='utf-8')    a追加读写模式,文件不存在时不报错,可以写入,且不清空之前内容,也可以读取,但是文件指针在最后,如果需要读取需要更改文件光标 

  可以打开图片 和视频 音频等文件

  open('XX','rb')  #bytes  以二进制方式打开

  open('XX','wb')

  open('XX','ab') 

例如:###############################从网上下载一个图片代码

# import requests      #requests 非标准包,需要安装
# url='xxxx' #图片的地址
# img=requests.get(url).content
# f=open('xxxx','wb') #文件名
# f.write(img)
##################################### 直接打开图片文件代码
# f=open('121.png','rb')   

2、读取:  print(f.read())      #即可读取文件的全部内容,返回字符串

    f.readline()      #读取文件的一行内容,返回的是字符串

    f.readlines()    #读取文件的所有内容,将每行内容放入list,每个元素为每行数据

3、关闭:  f.close()        #关闭文件

4、写入文件:  f.write(X)    写入时,X 必须为字符串                

      f.writelines(X)     写入时, X可以是可循环的数据类型,例如list 、字符串、元组 ,即写入时 时做了循环操作

      write  写入字符串时 , 效率高   直接写入

      writelines, 写入字符串 效率低, 会做循环操作  

5、修改文件指针  f.seek(0)  即将指针修改为0 ,即文件开始, 只针对读 管用,对写不管用,即写永远在最后

6、清空文件数据   f.truncate()  #清空文件内容

7、查看当前文件指针位置  f.tell()

8、高效处理文件方法:

#直接循环文件对象的话,就是循环文件里面的每一行

for f in fw:

9、with 方法, 自动关闭文件,即无需 手动关闭

  with open(‘a.txt’,‘w’) as  xxx:      #xxx即为自己定义的文件变量,即上述 定义的f

   xxx.write('hhhh') 

  打开多个文件: 

  with open(‘a.txt’,‘w’) as  xxx1,open('b.txt','w')as xxx2:

    xxx1.write('hhhh')

    xxx2.write('yyyy')

       

10、文件立即生效: 

  程序执行从头向下执行,会先存在缓冲区,等缓冲区满之后再写入磁盘中

  如果想立即生效,可以调用f.flush()  则会立即写入磁盘,即程序立即生效

  

11、文件修改:

  两种方法:

文件修改方法一,不适用于大文件,方法比较笨
# with open('geci','a+',encoding='utf-8') as f:
# f.seek(0)
# all=f.read() #问津指针在最后
# new_all=all.replace('二','一')
# f.seek(0)
# f.truncate()
# f.write(new_all)
# f.flush()

#文件修改方法2
# import os
# # with open('geci', 'a+', encoding='utf-8') as f,open('geci.bak','w')as f2:        #定义一个临时文件
# # f.seek(0)
# with open('geci',encoding='utf-8') as f, open('geci.bak', 'w')as f2:
# for line in f:            #直接循环文件则循环的是文件的每一行
# new_line=line.replace('1','8') #一行一行进行清空时, 指针已经在第一行下,不好直接清空,
# f2.write(new_line) # 因此再定义一个新文件
# os.remove('geci')
# os.rename('geci.bak','geci') 
 

 

posted @ 2018-01-04 22:08  jyjbeijing  阅读(223)  评论(0)    收藏  举报