陈银山 发表于 2018-8-15 07:30:46

学习python对文本文档的操作

  目的:使用python中的open函数对文本文档进行读写,即用python怎么读写txt。
  环境:Python 3.5.2   Python 2.7.12   Ubuntu 16
  函数:
  open(filename, 'value')
  第一个参数filename:
  这里filename是文件名称,不推荐在第一个参数上直接写'路径/文件',最好用变量代替,如果一定要直接写路径,请写在引号内open('c:\\windows\\log.txt'),在window中路径用\\分割。
  第二个参数:
  说第二个参数前要明白一个概念,seek指针,即指出开始操作的位置。
  r   可读,不可写,指针在首部,文件不存在时打开报错,不填则默认为'r',open(filename) 等同于 open(filename, 'r')。
  r+可读,可写,指针在首部,文件不存在时打开报错
  w不可读,可写,指针在首部,创建一个新的空白文件,已经存在则覆盖。
  w+ 可读,可写,指针在首部,创建一个新的空白文件,已经存在则覆盖。
  a   不可读,可写,指针在尾部,原有的内容后面追加文本,文件不存在创建新的空白文件。
  a+ 可读,可写,指针在尾部,原有内容后面追加文本,文件不存在则创建新的空白文件。
  b   附加参数,以二进制形式操作,不可单独使用。
  U附加参数,替换换行符为\n。
  以上参数可以组合使用,如:rb, wb, rb+等。
  需要注意的是:这里所有的写都是覆盖写,不是插入写,如r+默认会从首部开始覆盖写入,已经存在的内容会被覆盖,文件的读取和写入都会改变指针的位置。
  指针:
  这个要重点说明,指针意思就是指出开始操作的位置,读写都会改变指针的位置,如w+写完再读返回空,因为写完后指针在尾部,读取是自动从指针处开始。
  seek(int, )
  设定指针偏移量,第一个参数是偏移的值(整数),正数向右,负数向左,第二个参数可选,默认是0,表示相对内容首部,为1则是相对当前位置,为2表示相对尾部。
  seek(0)等同于seek(0, 0)意思是相对于内容首部偏移0。
  这里注意:python 2.x 可直接用seek的第二个参数,python 3.x则必须以附加'b'参数打开才能用。
  tell() 获取当前指针的位置。
  说明先设定上下文:
  test.txt文件内容:
This is a test of Ricky.  
The second line.
  
The third line.
  python部分:
file = open(filename, 'r+')  
file.tell() # 返回当前指针位置为0。
  
file.seek(8)# 设定指针位置相对首部偏移8
  
file.readline() # 返回字符串'a test of Rciky.',指针位置到了25,在第二行行首。
  
file.write('changed') # 从第二行写入字符串'changed',第二行变成'changedond line.'
  
ff.close()
  可以发现,执行的是覆盖写入,且指针的位置会变化,所以w+先写后读返回空白。
  下面演示文件的读写:
#以写操作打开文件filename,存在则覆盖,不存在则建立(说白了就是不管文件在不在,这里会有一个空白文件)  
f = open(filename,'w')
  
#执行写操作,写入内容是this is a test.
  
f.write('this is a test.')
  
#再次以读操作打开文件filename,这里没有加参数则默认添加了‘r’的操作
  
f = open(filename)
  
#输出读取的内容
  
print f.readline()
  
#最后一定要关闭文件。
  
f.close()
  文件的读操作有read() 、readline()和readlines():
  read(): 一次性读取文本为字符串到内存中,不会逐行处理;
  readline():每次读取一行文本为字符串到内存;
  readlines():一次性读取文本为列表到内存,速度快于readline().
  对于文件的大小和内存问题,根据自己的实际情况选择处理。
  文件的写操作有write()和writelines():
  write(str): 这个接受一个字符串对象
  writelines(list): 这个接受一个可迭代对象,如一个列表,但当列表内嵌套列表则返回错误。
  这里推荐用with方法打开文件,即使发生错误,也会在结尾自动关闭文件。
with open(filename, 'w') as file_text:  
    file_text.write('this is second test!')
  
    #这样这个块就不需要执行文件close()
页: [1]
查看完整版本: 学习python对文本文档的操作