python读写操作

【学习笔记】
Python 文件I/O–菜鸟教程
《python编程从入门到实践》

一、开关读写文件

(1) 开

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+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

(2) 关

close( )方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。

file_object.close()

#!/usr/bin/python
# 打开一个文件
fo = open("foo.txt", "w")
print "文件名: ", fo.name
 
# 关闭打开的文件
fo.close()



>>文件名:  foo.txt

(3) 写

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!


(4) 读

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对象的属性

一个文件被打开后,你有一个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打开文件

关键字 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)


五、写入文件例

(1) 追加日记

#用户输入
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!!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值