python文件处理——读取和写入

1、

  计算机系统分为:计算机硬件,操作系统,应用程序三部分。

我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。

  操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来,

  所以说操作系统就是应用程序/用户和硬件之间的承上启下的桥梁,两者之间的交流必须要通过操作系统来完成。

2.文件的存储方式

  在计算机中,文件时以二进制的方式保存在磁盘中的;

  文本文件可以使用文本编辑软件进行操作,但是本质上海事二进制文件;

  二进制文件保存的内容不是给人直接阅读的,而是提供给其他软件使用的(图片文件,音频文件,视频文件等等,用相应的软件进行查看);

  二进制文件不能使用文本标记软件进行查看。

   

3.操作文件的流程:

 1.打开文件,得到文件句柄并赋值给一个变量;
 2.通过句柄对文件进行操作;
 3.关闭文件。
f=open("a.txt")
data=f.read()
print(data)
f.close()
##############################
以下是您的激活码,
本文档已经自动保存到您的桌面,
如果更换电脑或者重做操作系统,可以使用激活码找回剩余流量。
官宣!上港老总担任足协换届筹备组组长 有望成新一届足协主席。
北京时间5月24日消息,中国足协召开执委扩大会,宣布上港集团董事长陈戌源担任足协换届筹备组组长!
由于新一届足代会还未召开,蔡振华仍是名义上的足协主席,足代会最快将在六月中下旬召开,届时,陈戌源将成为中国足协主席。
中国足球协会成立中国足协换届筹备组,宣布陈戌源同志担任筹备组组长,筹备组负责拟定换届工作方案,筹备召开中国足协代表大会。
这意味着,陈戌源将出任中国足协主席。
接下来,陈戌源将开启职业联盟改革。
第一,中超赛事的竞赛组织交给联盟,市场开发和管理,都是联盟说了算;
第二,按照国际足联的规则去运作,要尊重足球发展规律;中超联盟成立和起步后,推动职业化发展,帮助培育俱乐部形成自我发展。
View Code
【了解】文件指针
      文件指针标记从哪个位置开始读取数据;
      当第一次打开文件时,通常文件指针会指向文件的开始位置;
      当执行了read方法之后,文件指针会移动到读取内容的末尾(默认情况下);
      所以说当再次有read方法就会没有内容(默认情况下)。

注意:
  一定要关闭文件,当然了也可以使用with关键字来进行处理。
  这样也就不用close了。
with open("a.txt") as f:
    data=f.read()
    print(data)
View Code

 


4.文件操作基本用法
(1)基本用法:
file_object = open(file_name, access_mode = ‘r’, buffering = -1)
open函数有很多的参数,常用的是file_name,mode和encoding
file_name:打开的文件名,若非当前路径,需指出具体路径
access_mode文件打开模式
buffering的可取值有0,1,>1三个,0代表buffer(缓冲器)关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),
>1表示初始化的buffer大小; encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk,所以说若要保证不乱码,文件以什么方式打开。

(2)文件打开模式
    r ,只读模式【默认模式,文件必须存在于同一个路径下,不在的话,则抛出异常,所以说,不在一起时候,要使用绝对路径】
    w, 只写模式【不可读;不存在则创建;存在则清空内容;在不在同一个路径下都不会报错,不存在的话就会新创建】
    x, 只写模式【不可读;不存在则创建,存在则报错】
    a, 追加模式【可读;   不存在则创建;存在则只追加内容】,文件指针自动移到文件尾。

  "+" 表示可以同时读写某个文件

    r+, 读写【可读,可写】

    w+,写读【可读,可写】,消除文件内容,然后以读写方式打开文件。

    x+ ,写读【可读,可写】

    a+, 写读【可读,可写】,以读写方式打开文件,并把文件指针移到文件尾,也就是说不会覆盖之前文件中有的内容,而是将写入到文件的内容都添加到文                          件末尾。

  二进制模式,通常用来读取图片、视频等二进制文件。注意,它在读写的时候是以bytes类型读写的,因此获得的是一个bytes对象而不是字符串。在这个读写过程中,需要自己指定编码格式。在使用带b的模式时一定要注意传入的数据类型,确保为bytes类型。

 

s='I love China'
b=bytes(s,encoding='utf-8')
f=open('test.txt','wb')
#f.write(s) 
# TypeError: a bytes-like object is required, not 'str'
##意思是它需要一个bytes类型数据,你却给了个字符串
f.write(b)# 正确
View Code

 

 

 

   "b"表示以字节的方式操作,以二进制模式打开文件,而不是以文本模式。

    rb  或 r+b

    wb 或 w+b

    xb 或 w+b

    ab 或 a+b

   注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码。

   

   对于w+模式,在读写之前都会清空文件的内容,建议不要使用!

  对于a+模式,永远只能在文件的末尾写入,有局限性,建议不要使用!

  对于r+模式,也就是读写模式,配合seek()和tell()方法,可以实现更多操作。

  r+  可读可写,先写的话,从头开始覆盖写,接着读的话就读光标之后的内容,读写跟着光标走;

  如果要写入中文,则要注意编码。

 

 (3)文件内光标移动

  f=open('b.txt','r+',encoding='utf-8',newline='') #读取文件中真正的换行符号
  f.flush() 将文件内容从内存刷到硬盘
  f.closed #文件如果关闭则返回True
  f.encoding #查看使用open打开文件的编码
  f.tell() #查看文件处理当前的光标位置

seek() 方法语法如下:

参数

  • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数

  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,

  • 2代表从文件末尾算起。


  • f=open('日志文件','rb')
  • for i in f:
  •     offs=-10
    while True:
    f.seek(offs,2)
    data=f.readlines()
    if len(data) > 1:
    print('文件的最后一行是%s' %(data[-1].decode('utf-8')))
    break
    offs*=2
  • f.truncate(size)
  •  #方法用于从文件的首行首字符开始截断,将文件只保留从0-size个字节,截断文件为 size 个字符,无 size 表示从当前位置截断;
  • 截断之后 V 后面的所有字符被删除,文件必须以写方式打开,但是w和w+除外

 

 (4)逐行读取文件

f=open("a.txt")
while True:
    data=f.read()
    # 判断是否读取到数据
    if not data:
        break
    print(data)
f.close()

#######################
以下是您的激活码,
本文档已经自动保存到您的桌面,
如果更换电脑或者重做操作系统,可以使用激活码找回剩余流量。
官宣!上港老总担任足协换届筹备组组长 有望成新一届足协主席。
北京时间5月24日消息,中国足协召开执委扩大会,宣布上港集团董事长陈戌源担任足协换届筹备组组长!
由于新一届足代会还未召开,蔡振华仍是名义上的足协主席,足代会最快将在六月中下旬召开,届时,陈戌源将成为中国足协主席。
中国足球协会成立中国足协换届筹备组,宣布陈戌源同志担任筹备组组长,筹备组负责拟定换届工作方案,筹备召开中国足协代表大会。
这意味着,陈戌源将出任中国足协主席。
接下来,陈戌源将开启职业联盟改革。
第一,中超赛事的竞赛组织交给联盟,市场开发和管理,都是联盟说了算;
第二,按照国际足联的规则去运作,要尊重足球发展规律;中超联盟成立和起步后,推动职业化发展,帮助培育俱乐部形成自我发展。
View Code
with open('aaa.txt') as read_f:
    data=read_f.readlines()
    for item in data:
        print(item)
###############
2154.3657892

4572.321458754

0.124875996

1.25487

2355644
View Code

 

(5)写入文件

with open('aaa.txt',"w+") as read_f:
    data1=read_f.write("小猪猪")
    data2=read_f.readlines()
    for item in data2:
        print(item)
View Code

  如果文件之前有内容,在使用W+模式时,会把之前的内容消除掉,再把后面的内容写入;

  在写入多行时,write()不会再写入的文本末尾添加换行符,所有在后面要加上换行符。

(6)复制文件

  小文件复制:

#  1.打开
file_read=open("a.txt")
file_write=open("a_copy.txt","w")
#  2.读、写
data=file_read.read()
file_write.write(data)
#  3.关闭
file_read.close()
file_write.close()
View Code

 

【要准备一个空文件a_copy.txt】

  大文件复制:

#  1.打开
file_read=open("a.txt")
file_write=open("a_copy.txt","w")
#  2.读、写
while True:
    data=file_read.readline()
    if not data:
        break
    file_write.write(data)
#  3.关闭
file_read.close()
file_write.close()
View Code

 

 

 

 

 

  

posted @ 2018-09-04 22:25  小猪猪猪  阅读(498)  评论(0)    收藏  举报