【学习笔记】
Python 文件I/O–菜鸟教程
《python编程从入门到实践》
open( )
函数用于打开一个文件,创建一个 file 对象
file_object = open (file_name [, access_mode][, buffering])
- file_name: 要访问的文件名称的字符串值
- access_mode:access_mode决定了打开文件的模式:只读,写入,追加等【默认只读 r】
常用access_mode的说明
模式 | 描述 |
---|---|
+ | 打开一个文件进行更新(可读可写)。 |
r | 以只读方式打开文件这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 二进制格式打开一个文件用于读写。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入 |
wb+ | 以二进制格式打开一个文件用于读写 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
close( )
方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
file_object.close()
#!/usr/bin/python
# 打开一个文件
fo = open("foo.txt", "w")
print "文件名: ", fo.name
# 关闭打开的文件
fo.close()
>>文件名: foo.txt
write()
可将任何字符串写入一个打开的文件。
file_object.write(string)
#!/usr/bin/python
# 打开一个文件
fo = open("foo.txt", "w")
fo.write( "www.runoob.com!\nVery good site!\n")
# 关闭打开的文件
fo.close()
>>$ cat foo.txt
www.runoob.com!
Very good site!
read( )
方法从一个打开的文件中读取一个字符串
file_object.read([count])
- 参数是要从已打开文件中读取的字节计数。该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。
#!/usr/bin/python
# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "读取的字符串是 : ", str
# 关闭打开的文件
fo.close()
>>读取的字符串是 : www.runoob
一个文件被打开后,你有一个file对象,你可以得到有关该文件的各种信息。
fo = open("D:\\vscode\\work\\test\\a.txt", "r+")
a = fo.read()
print(a)
fo.close()
print("是否已关闭 : ", fo.closed)
print("文件名:", fo.name)
print("文件访问类型", fo.mode)
>>>
asd
asd
111111
是否已关闭 : True
文件名: D:\vscode\work\test\a.txt
文件访问类型 r+
关键字 with在不需要访问文件后将其关闭。只用open(), 不用close()。
目的
- 若使用
open()+close()
的方式访问文件。当程序出错时,导致close()语句未执行,造成文件数据受损或者丢失。
with open("D:\\vscode\\work\\test\\a.txt", "r+") as file_object:
a = file_object.read()
print(a)
print("退出前:", file_object.closed)
print("退出后:", file_object.closed)
>>>
asd
asd
111111
退出前: Falses ???
退出后: True ???
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x9a in position 8: illegal multibyte sequence
【做法】
先用二进制读,后解码。
file = input("请输入文件的绝对路径:")
print(file)
with open(file,"rb") as file_object:
a = file_object.read().decode('utf-8') ???
print(a)
print("退出前:", file_object.closed)
print("退出后:", file_object.closed)
#用户输入
inp = input("请输入要记录的的内容:")
user_input = "\n"+inp
#写入
with open(r"D:/vscode/work/python学习/a.txt", "rb+") as file_object:
print("之前的内容")
a = file_object.read().decode('gbk')
print(a)
file_object.write(user_input.encode())
print("""
------------
当前内容为
------------
""")
#读文件
with open(r"D:/vscode/work/python学习/a.txt", "rb+") as file_object:
b = file_object.read().decode('gbk')
print(b)
请输入要记录的的内容:hahahha hello!!
之前的内容
<<日记本>>
adsadw
1111
------------
当前内容为
------------
<<日记本>>
adsadw
1111
hahahha hello!!