Python文件基本操作
Python文件基本操作
1、文件对象的属性
file.closed | 如果文件已被关闭返回true,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.newlines | 未读取到行分隔符时为 None , 只有一种行分隔符时为一个字符串, 当 文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束 符的列表 |
file.encoding | 返回文件的编码方式 |
2、文件的打开
文件打开是通过内置函数open(),并返回一个文件对象,
file object = open(file_name [, access_mode][, buffering])file_name: file_name变量是一个包含了你要访问的文件名称的字符串值。比如:‘hello.text’
access_mode:访问文件的模式,只读(r),写入(w),追加(a)等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
buffering:值为0,访问文件时不寄存行。值为1,访问文件时寄存行。值为大于1的正数表示指定寄存区缓冲大小。值为负数时表示寄存区缓冲大小为系统默认。
一表胜十文:
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式. |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 以读写方式打开文件,文件的指针在文件的开头 |
rb+ | 以二进制格式打开一个文件可以用于读写,文件指针放在开头。一般用于非文本文件如图片等。 |
w | 以只写方式打开文件,文件的指针在文件的开头,如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件用于只写,文件的指针在文件的开头。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。r+ |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
一图胜十表:
读 | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ✔️ |
写 | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
创建 | ❌ | ❌ | ✔️ | ✔️ | ✔️ | ✔️ |
覆盖 | ❌ | ❌ | ✔️ | ✔️ | ❌ | ❌ |
指针在开始 | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
指针在结尾 | ❌ | ❌ | ❌ | ❌ | ✔️ | ✔️ |
3、文件输入
文件的输入和输出是相对应屏幕来说,从读取文件内容到屏幕上叫输入,将屏幕上内容写到文件内叫输出
3.1 read(size):
用于从文件读取指定的字节数,size:从文件中读取的字节数。如果size未给定或为负则读取所有
allen.txt文件内容
从结果上看,使用同一个file读取多次时,指针的位置从上一次读取的最后位置的下一个位置开始读取的。
3.2 readline()
用于从文件读取整行,包括 "\n" 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 "\n" 字符。
fo = open("allen.txt", "r+") print("文件名为: ", fo.name)line = fo.readline() print("读取第一行 %s" % line)line = fo.readline(5) print("读取的字符串为: %s" % line) fo.close()结果:
文件名为: allen.txt 读取第一行 line1 读取的字符串为: line23.3 readlines()
用于读取剩余未读取的所有行(直到结束符 EOF)并返回列表,而不是所有行,如果碰到结束符 EOF 则返回空字符串。
fo = open("allen.txt", "r+") print("文件名为: ", fo.name) line = fo.readlines(1) print("读取第一行 %s" % line) line = fo.readlines() print("读取剩余行: %s" % line) fo.close()结果:
文件名为: allen.txt 读取第一行 ['line1\n'] 读取剩余行: ['line2\n', 'line3']使用for循环
例子1:
结果:
line1line2line3例子2:
fo = open('allen.txt', 'r') for line in fo.readlines():print(line.strip()) fo.closed再来看加上strip()后的结果
line1 line2 line3从以上两个例子中可以看出,readlines()读取的时候将换行符\n也一块读取出来,需要我们自己去掉,其实read()、readline()也是一样
4、文件输出
4.1 write()
向文件中写入指定字符串。
import osfo = open('allen.txt', 'w+') while True:line = input('input content') # input不会保留换行符,需要自己加上系统的换行符if line != '.':fo.write('%s%s' % (line, os.linesep))else:break for line in fo.readlines():print(line) fo.close()如果我们分别输入3行:
line4 line5 line6本来我们“allen.txt”文件中有以下三行:
line1 line2 line3加上我们输入的3行应该是
line1 line2 line3 line4 line5 line6运行结果:
line4 line5 line6但结果并不是啊,原因是什么呢?还有为什么我们要加上os.linesep()
需要注意点:
1、以‘w/w+’模式打开的文件,如果文件存在则会覆盖,如果文件不存在则会新建。
2、write()和read()一样并不会操作换行符,需要使用os模块下os.linesep()加上换行符,否则只会在一行上写
4.2 writelines()
向文件中写入一序列的字符串。
这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
换行需要制定换行符 \n。
我们输入3行
line1 line2 line3打开文件查看结果:
line1 line2 line35、文件定位移动
5.1 tell()
例子1:
fo = open('allen.txt', 'r') for line in fo.readline():print('本行内容:%s,指针所在的位置:%d' % (line, fo.tell())) fo.close() 本行内容:line1,指针所在的位置:6 本行内容:line2,指针所在的位置:12 本行内容:line3,指针所在的位置:18例子2:
fo = open('allen.txt', 'r') for line in fo.readlines():print('本行内容:%s,指针所在的位置:%d' % (line, fo.tell())) fo.close() 本行内容:line1,指针所在的位置:18 本行内容:line2,指针所在的位置:18 本行内容:line3,指针所在的位置:18从例子1和2中我们可以看出readline()读取一行,指针的位置移动一行,readlines()是一下子读取到尾部。
5.2 seek()
seek(offset[, whence]) :没有返回值
offset -- 偏移量,也就是代表需要移动字节数
whence:可选,默认值为 0。表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起
6、文件迭代
file对象是一个可迭代的对象,可以使用for循环进行迭代
fo = open("allen.txt", "r") for content in fo:print(content) fo.close() line1line2line3内功深厚的同学,应该发现了一个问题,上边所有的例子我们再关闭文件的时候都是直接close(),试想一下,万一中间出现异常了,close就执行不了,为了保证无论是否出错都能正确地关闭文件,我们可以使用 try ... finally :
try:f = open('allen.txt', 'r')print f.read() finally:if f:f.close()但是每次都这么写实在太繁琐,所以,Python 引入了 with 语句来自动帮我们调用 close() 方法:
with open('allen.txt', 'r') as f:f.read()是不是很简洁,有木有
转载于:https://www.cnblogs.com/suxianglun/p/9052718.html
总结
以上是生活随笔为你收集整理的Python文件基本操作的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 静态语言与动态语言
- 下一篇: 520戏精上身!纸短情长,一句顶一万句的