Python–file 的读写以及常用方法

  • Post author:
  • Post category:python


今天开始学习file  的基本操作。

在Python中,不可避免的需要对实际数据文件进行读写等各种操作。

Python 提供了函数和方法对文件基本的操作。可以使用file对象做大部分的文件操作。

对文件进行操作需要按照如下步骤:

1. open 文件,

2. 文件操作(读或写)


3. 关闭文件 这是基本要求。

1、file 打开文件



open()函数



作用:打开文件,创建一个file 对象。



语法:

     file object = open(file_name [, access_mode][, buffering])

其中: file_name : 是一个包含了需要访问的文件名的字符串值。

access_mode : 决定了打开文件的模式: 只读、写入、追加


,默认文件访问模式是只读(r)

buffering : if  buffering ==0 ,则不会寄存,bufferiing =1 ,文件会寄存行。if buffering>1 的整数,表明了寄存区的缓冲大小。if                             buffering <0 ,寄存区的缓冲大小为系统默认。

下面给出不同模式打开文件的列表:

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

例如:

import codecs
f=codecs.open('1.txt') //打开文件,默认为只读
print (f.read())
f.close()
1111111
2222222
3333333
4444444
5555555
f=codecs.open('1.txt','rb')
file=codecs.open('4.txt','wb')

按照各自不同模式进行打开文件。

file 对象的属性:

当文件被打开后,就有了一个file 对象,可以获取file的各种相关信息。

先给出file的属性列表:

属性 描述
file.closed 返回true如果文件已被关闭,否则返回false。
file.mode 返回被打开文件的访问模式。
file.name 返回文件的名称。
file.softspace 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。

例如:

import codecs
f=codecs.open('1.txt','rb')
print (f.read())
print (f.mode)
print (f.name)
print (f.softspace)
print (f.closed)
f.close()
print (f.closed)

1111111
22222222
33333333
444444444


rb
1.txt
0
False
True
True

在上面用到了close() 方法

close () 关闭文件。

当一个文件对象的引用被重新制定给另外一个文件时,Python 会关闭之前的文件。


2. file读文件


1.read()  作用: 从一个打开的文件中读取一个字符串。


方法: file.read(count);

count: 是要从已打开文件中读取的字节计数。

该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。


import codecs
f=codecs.open('1.txt','rb')
print (f.read())
f.close()
1111111
22222222
33333333
444444444




2. readlines()


作用:用于读取所以行(直到结束符EOF),并返回列表。该列表可由for 语句处理。

读取文件内容,文件内容的每一行都是一个字符串,最后返回一个list

语法:file.readlines()

返回值: 列表,包含所以行

例如:

1.txt 的内容如下:

1111111
2222222
3333333
44444444
555555555
666666666
import codecs
f=codecs.open('1.txt','rb')
print (f.readlines())
f.close()

结果:

['1111111\n', '2222222\n', '3333333\n', '44444444\n', '555555555\n', '666666666\n']

3. readline()

作用:

用于从文件中读取一行,返回一个字符串。包括“\n”.

如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符

语法:file.readline()

返回值: 返回从字符串中读取的字节

import codecs
f=codecs.open('1.txt','rb')
print (f.readline())
f.close()
1111111
import codecs
f=codecs.open('1.txt','rb')
print (f.readline())
print (f.readline())
print (f.readline())
print (f.readline())
print (f.readline())
f.close()
1111111

2222222

3333333

44444444

555555555

从上面可以看出: readlines 与readline  的区别,readlines 主要是读取文件内容的所有内容,且,每一行都是一个字符串,最后返回一个list。 而readline是读取文件内容的某一行,返回一个字符串。



3、file 写文件


write()方法可以将任何字符串写入一个打开的文件。该方法不会再字符串的结尾添加换行符(“\n”)


语法: file.write(string)


string : 是要写入到已经打开文件的内容


import codecs
f=codecs.open('1.txt','ab')
f.write('hello python1\n')
f.write('hello %s\n' % 'yansss')
f.write('hello {0}\n'.format('ssssss'))
f.write('hello python3\n')
f.close()

另外,1.txt 内容如下:


111111111
22222222
33333333
444444444
55555555
f=open('1.txt','wb')
f.write('wwww.run\nvery good\n\hello python\n')
f.close()

在此查看1.txt:


wwww.run
very good
\hello python

2.writelines()

作用: 用于向文件中写入一序列的字符串。这一序列字符串可以是迭代对象产生的,如字符串列表。换行需制定换行符\n

语法:file.writlines(str)

str–要写入的字符串序列

返回值: 无

import codecs
f=codecs.open('5.txt','wb')
f.writelines(['abdc\n','dddd\n','ddhdh\n'])
f.close()

结果5.txt 内容如下:

abdc
dddd
ddhdh

以上可以看出,writelines 必须传入一个序列,即列表,write 必须传入的是字符串。

4. file 常用方法

1.flush()用来刷新缓冲区,即将缓冲区的内容立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区

一般,文件关闭后自动刷新缓冲区。

但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法

语法:file.flush()

返回值:无

import codecs
f=codecs.open('5.txt','rb')
print (f.name)
f.flush()
f.close()
5.txt

2.tell ()

作用: 返回文件的当前位置,即文件指正当前位置

语法: file.tell(offset[, where])

返回值:文件位置

文件内容:

abdc
dddd
ddhdh
import codecs
f=codecs.open('5.txt','rb')
print (f.name)
print (f.readline())
print(f.tell())
f.close()

结果:

5.txt
abdc


5

3.next()

作用:读取文件的下一行内容,返回一个字符串。

语法: file.next()

返回值: 返回文件的下一行

1.txt内容如下:

1111111
2222222
3333333
44444444
555555555
666666666

import codecs
f=codecs.open('1.txt','rb')
print (f.name)
print (f.readline())
print (f.next())
f.close()

结果:

1.txt
1111111


2222222



版权声明:本文为yanyangjie原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。