8 | file.readlines([sizeint]) 读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。 |
9 | file.seek(offset[, whence]) 设置文件当前位置 |
10 | file.tell() 返回文件当前位置。 |
11 | file.truncate([size]) 截取文件,截取的字节通过size指定,默认为当前文件位置。 |
12 | file.write(str) 将字符串写入文件,返回的是写入的字符长度。 |
13 | file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
YukiMirai
Jol***ose@163.com
在 write 内容后,直接 read 文件输出会为空,是因为指针已经在内容末尾。
两种解决方式: 其一,先 close 文件,open 后再读取,其二,可以设置指针回到文件最初后再 read
YukiMirai
Jol***ose@163.com
菜鸟一号
my_***@sina.com
为了保证无论是否出错都能正确地关闭文件,我们可以使用 try ... finally 来实现:
但是每次都这么写实在太繁琐,所以,Python 引入了 with 语句来自动帮我们调用 close() 方法:
这和前面的 try ... finally 是一样的,但是代码更佳简洁,并且不必调用 f.close() 方法。
菜鸟一号
my_***@sina.com
小白Richie
nml***@163.com
Python 在 Windows 环境下(在 linux 环境下不存在此问题),在 write 后,直接 read, 会出现乱码问题。如下:
运行结果会出现一堆乱码,我们会初步判断为编码问题, 但其实并不是编码问题, 而是 EOF 的问题,也就是指针的位置问题,当我们以 w+ 开启文件读写模式的时候,由于是 w,所以文件会被清空,也就是文件为空,初始状态指针为 0 ,也就是初始即为 EOF 位置。
当我们写入字符串 www.runboon.com 后,指针的位置为 15,文件在缓存中的的内容为 www.runboon.com[EOF],指针的最后位置为 15, 所以直接 open 的时候会默认跳过 15,直到读取到了前一个 EOF 为止,所以你会得到缓存中的一堆乱码。
Python 是使用 fopen/fread/fwrite 这系列函数来读写文件的,经查阅 MSDN:http://msdn.microsoft.com/en-us/library/yeby3zcb.aspx 经查阅, 里面有一句对写入后读取操作的一句表述:When you switch from writing to reading, you must use an intervening call to either fflush or to a file positioning function. 这句话给出了解决方法, 也就是write后执行read方法我们需要先执行flush()方法或指定一个文件读取为止。
改进以后的代码如下:
读取乱码问题完美解决。