标签:utf-8 while eve 保留 结束 lines 字节 二进制格式 基本
属性 | 描述 |
---|---|
file.closed | 如果文件已被关闭返回true,否则返回false。 |
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.newlines | 未读取到行分隔符时为 None , 只有一种行分隔符时为一个字符串, 当 文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束 符的列表 |
file.encoding | 返回文件的编码方式 |
file = open(‘allen.txt‘, ‘w‘)
print(file.name)
print(file.mode)
print(file.encoding)
print(file.newlines)
输出结果:
allen.txt
w
UTF-8
None
文件打开是通过内置函数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+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
一图胜十表:
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | ?? | ?? | ? | ?? | ? | ?? |
写 | ? | ?? | ?? | ?? | ?? | ?? |
创建 | ? | ? | ?? | ?? | ?? | ?? |
覆盖 | ? | ? | ?? | ?? | ? | ? |
指针在开始 | ?? | ?? | ?? | ?? | ? | ? |
指针在结尾 | ? | ? | ? | ? | ?? | ?? |
文件的输入和输出是相对应屏幕来说,从读取文件内容到屏幕上叫输入,将屏幕上内容写到文件内叫输出
用于从文件读取指定的字节数,size:从文件中读取的字节数。如果size未给定或为负则读取所有
allen.txt文件内容
line1
line2
line3
file = open(‘allen.txt‘, ‘r‘)
cont1 = file.read(2)
cont2 = file.read(10)
cont3 = file.read(15)
print(‘cont1=%s‘ % cont1)
print(‘cont2=%s‘ % cont2)
print(‘cont3=%s‘ % cont3)
file.close()
结果:
cont1=li
cont2=ne1
line2
cont3=line3
从结果上看,使用同一个file读取多次时,指针的位置从上一次读取的最后位置的下一个位置开始读取的。
用于从文件读取整行,包括 "\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
读取的字符串为: line2
用于读取剩余未读取的所有行(直到结束符 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:
fo = open(‘allen.txt‘, ‘r‘)
for line in fo.readlines():
print(line)
fo.closed
结果:
line1
line2
line3
例子2:
fo = open(‘allen.txt‘, ‘r‘)
for line in fo.readlines():
print(line.strip())
fo.closed
再来看加上strip()后的结果
line1
line2
line3
从以上两个例子中可以看出,readlines()读取的时候将换行符\n也一块读取出来,需要我们自己去掉,其实read()、readline()也是一样
向文件中写入指定字符串。
import os
fo = 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()加上换行符,否则只会在一行上写
向文件中写入一序列的字符串。
这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
换行需要制定换行符 \n。
fo = open(‘allen.txt‘, ‘w+‘)
while True:
line = input(‘input content‘) # input不会保留换行符,需要自己加上系统的换行符
if line != ‘.‘:
fo.writeline(‘%s%s‘ % (line, os.linesep))
else:
break
for line in fo.readlines():
print(line)
fo.close()
我们输入3行
line1
line2
line3
打开文件查看结果:
line1
line2
line3
例子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()是一下子读取到尾部。
seek(offset[, whence]) :没有返回值
offset -- 偏移量,也就是代表需要移动字节数
whence:可选,默认值为 0。表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起
fo = open("allen.txt", "r+")
line = fo.readline()
print("第一次读取的数据为:%s所在的位置为:%d " % (line, fo.tell()))
# 重新设置文件读取指针到开头
fo.seek(0, 0)
line = fo.readline()
print("第二次读取的数据为:%s所在的位置为:%d " % (line, fo.tell()))
fo.closed
第一次读取的数据为:line1所在的位置为:6
第二次读取的数据为:line1所在的位置为:6
file对象是一个可迭代的对象,可以使用for循环进行迭代
fo = open("allen.txt", "r")
for content in fo:
print(content)
fo.close()
line1
line2
line3
内功深厚的同学,应该发现了一个问题,上边所有的例子我们再关闭文件的时候都是直接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()
是不是很简洁,有木有
标签:utf-8 while eve 保留 结束 lines 字节 二进制格式 基本
原文地址:https://www.cnblogs.com/suxianglun/p/9052718.html