python学习笔记——python文件操作写入读取

这篇博客详细介绍了Python中的文件操作,包括写入模式(write, writelines)和读取模式(read, readlines)。文章强调了文件不存在时会如何处理,以及如何检查和创建目录。此外,还提到了编码问题,特别是使用ANSI(GBK)格式处理中文内容的注意事项,并建议使用`with`语句进行上下文管理。" 104837667,802425,TensorFlow拼接函数tf.concat详解,"['TensorFlow', '深度学习', '编程', '矩阵运算']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#顺带一提,在编写时是将本文件放在桌面,并且命名为'test02.py'进行操作的(不然下面的open内容可能会找不到文件)


#open()方法包含两个参数,第一个是地址,第二个是文件打开方式
#文件打开方式包括:
#   r - read 只读(read,readline,readlines方法)
#   w - write 只写(write方法)
#   r+ - 读操作+写操作
#   a - append 只写模式+文件指针置于末尾,这样使用write的时候不会覆盖
#       而w文件指针默认是在开头,会覆盖当前文件指针位置之后的内容


#   b标记:以二进制模式打开文件(适合所有非文本文件的打开,例如图片)

#   使用时直接在w后面添加就行了,如wb,rb,ab


#写入模式下有write和writelines方法,(没有writeline)
#writelines就是将列表/元组中的内容依次写入
#顺带一提,写入模式下如果文件不存在,会创建文件然后写入
#而读取不存在的文件则会报错。
#注意:但是如果目录不存在,则无论是写入还是读取模式都会报错!
#可以用os模块的os.path.exists('目录')来检验目录是否存在和os.makedirs('目录')来创建目录(makedirs可以一直创建到二级,三级以及更深的子目录)
#另外,如果目录已经存在,makedirs会报错

#可以用os.makedirs('目录', exist_ok=True)在目录已存在时不创建


f = open('c:/users/administrator/desktop/memoriesaier.data', 'a')
#f.write(b'1002') 二进制模式写入
list = ('a\n', 'b\n', 'c\n')
#list = ['a', 'b', 'c']
f.writelines(list)
f.close()
#在windows系统中,正式的地址写法应该是用反斜线\,又因为反斜线是转义字符,因此需要用r''即原生字符串来输入地址,或者使用\\来输入地址
#但是实际操作中使用斜线/也是可以打开地址

#顺带一提的是,为了用readlines打出这里的中文内容,这里的编码是ANSI(gbk)格式而非utf-8格式(所以print('中文字符')是无法使用的。同时用''' 注释'''包含的中文字符一样会无法识别而报错),同时注明#-*-coding:utf-8使得能够中文内容能够在cmd中输出。

#f = open('c:/users/administrator/desktop/test02.py', 'r')
#f = open(r'c:\users\administrator\desktop\test02.py', 'r')
f = open('c:\\users\\administrator\\desktop\\test02.py', 'r') 
for l in f.readlines():
    print(l, end='')
f.close()

#f.readlines()返回一个列表,包含文件内每行的内容

f = open('c:\\users\\administrator\\desktop\\test02.py', 'r')
#list = f.readlines()[4]
#print("print(f.readlines(), list):", list)
print("print(f.readlines(), f.readlines()):", f.readlines())
f.close()

#f.read()将整个文本作为字符串返回

f = open('c:\\users\\administrator\\desktop\\test02.py', 'r')
print("print(f.read(), f.read()):", f.read(10))
#print("print(f.read(), f.read()):", f.read())
f.close()
#值得一提的是,打开文件之后,重复使用f.read()亦或者f.readlines()
#第二次读取到的内容均为空(原因是文件指针已经到达文件末尾,而刚打开是文件指针实在开头的)
#同样,.read()和.readlines()的可以传入参数,表示文件指针跨越多少个字符然后停止。(顺带一提的是,这样之后再次使用.read()和readlines()方法是可以从暂停的位置继续的。)
#可以用f.tell()来获取文件指针的位置。

#另外可以用f.seek(2)来改变文件指针的位置,参数2(n)为文件指针位置

f = open('c:\\users\\administrator\\desktop\\test02.py', 'r')
print("print(f.readline(), f.readline()):", f.readline())
f.close()
#另外,除了read()和readlines()方法之外,还有readline()方法,不过readline()并非一次读取整个文本,而是使用一次将一行作为字符串返回。


#with 可以在完成内部代码之后自动关闭文件(即使代码报错)
#相当于自带.close()。

#因此,优先推荐使用with方法来打开上下文管理器。

with open('c:/users/administrator/desktop/test02.py', 'r') as f:
    for l in f.readlines():
        print(l, end='')
f.close()


#关于缓冲区
#python写入模式下文件内容首先会写入缓存区(而不是写入硬盘即文件内容)

#在缓存区写满或者关闭写入模式.close()之前,内容只会存在缓存区

import time
f = open('c:/users/administrator/desktop/test01.txt', 'a')
list = ('a\n', 'b\n', 'c\n')
f.writelines(list)
time.sleep(10)
f.close()
#可以用flush函数将缓存区的内容刷入磁盘。
import time
f = open('c:/users/administrator/desktop/test01.txt', 'a')
list = ('a\n', 'b\n', 'c\n')
f.writelines(list)
f.flush()
time.sleep(10)
f.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值