标签:有关 ext 写文件 read nta 缓冲区 tst visible str
https://www.cnblogs.com/evablogs/p/6725242.html
文件的打开读写关闭(文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源)
1
2
3
4
5
6
7
8
9
|
#写文件 with open (r ‘D:\Test\1.txt‘ , ‘w‘ ) as f: #with比<strong>try....finally</strong>更加简洁,with自动调用close()方法;open(文件路径,读取方式),r:只读,默认打开方式 f.write( ‘Hello,world‘ ) #write(str):写入字符串;writelines():一次性写入多行 #读文件 with open (r ‘D:\Test\1.txt‘ , ‘r‘ ) as f: #r:读 print f.read() #read([size]),size可选,指定读取的文件大小,单位是字节,默认读取全部,readline():读取一行;readlines([size]),读取返回一个列表,占内存空间 >>> Hello,world |
1
2
3
4
5
6
|
>>> try : f = open (r ‘D:\Test‘ ,r) print f.read() finally : if f: f.close() |
文件打开方式:
+:同时读写,即可读又可写,边写边读、边读边写
方式 | 说明 | 注意 | 是否清空文件 | 是否覆盖文件内容 | 文件不存在是否创建新文件 |
‘r’ | 只读 | 文件不存在时报错 | - | - | 否 |
‘r+‘ | 读写 | 可读可写,文件不存在报错,写入时只覆盖写入文件的大小 | 否 | 是 | 否 |
‘w‘ | 只写 | 可写方式打开,不可读 | 是 | - | 是 |
‘w+‘ | 读写 | 可读可写 | 是 | - | 是 |
‘a‘ | 追加 |
文件已有的内容后追加内容,不可读 |
否 |
否 | 是 |
‘a+‘ | 追加以及读 | 可读可追加,写入时,添加到文章末尾,并且指针位于添加后的末尾,所以再次读取会乱码,因为指针指向末尾,读取时实际上是跳过实际要读取的内容,去读取磁盘缓存的上一个文件缓存的内容,所以是乱码 | 否 | 否 | 是 |
‘rb‘,‘wb‘,‘ab‘,‘rb‘,‘wb+‘,‘ab+‘:二进制方式打开 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
>>> with open (r ‘D:\Test\a.txt‘ , ‘w‘ ) as f: f.write( ‘Hello,world‘ ) >>>with open (r ‘D:\Test\a.txt‘ , ‘r‘ ) as f: print f.read() >>> Hello,world #w写入 >>> with open (r ‘D:\Test\a.txt‘ , ‘a‘ ) as f: #追加,在后面添加内容 f.write( ‘Hello,world‘ ) >>> with open (r ‘D:\Test\a.txt‘ , ‘r‘ ) as f: print f.read() >>> Hello,worldHello,world >>> with open (r ‘D:\Test\a.txt‘ , ‘w‘ ) as f: #清空前面的内容重新写入 f.write( ‘Hello,world‘ ) >>> Hello,world |
有关文件可能读取出乱码的问题:
一:检查下文件的指针的指向,在写完之后,必须要seek(0),把文件指针重新指向文件开头,然后再读,否则就会从缓冲区读取一大堆乱码
二:文件写入的操作先是在缓存中进行的,只有文件关闭才真正写入,因为read()
似乎还是优先读取内存缓冲区。
以上的两个问题涉及到文件指针的移动seek()以及刷新缓存flush()
1
2
3
4
5
6
7
8
9
|
>>> f = open (r ‘D:\Test\a.txt‘ , ‘w‘ ) >>> f.write( ‘kkkkkkkk‘ ) #此时文件的指针=8,8个字节 >>> f.flush() #刷新缓存,缓存中的内容刷新变成:kkkkkkkk[EOF],内容为空时:[EOF] >>> f.read() #此时的指针在文件尾[EOF]上,则输出的是‘‘ ‘‘ >>> f.seek( 0 ) #将指针指向文件头,再进行文件内容的读取,就不会产生乱码 >>> f.read() ‘kkkkkkkk‘ >>> f.close() |
产生乱码例子:
1
2
3
4
|
>>> f = open (r ‘D:\Test\a.txt‘ , ‘w+‘ ) >>> f.write( ‘uuuuuuuuuuuuuuuu‘ ) >>> f.read() #没有刷新缓存且将指针指向文件头,读取的是缓存中的其他乱码内容 ‘\x00\x06\x00\x00\x00@\x00\x00\x00sb\x00\x00\x00d\x00\x00Z\x00\x00d\x01\x00d\............................. |
标签:有关 ext 写文件 read nta 缓冲区 tst visible str
原文地址:https://www.cnblogs.com/yuer20180726/p/10790332.html