文件操作

file对象使用open函数来创建,下表列出了file对象常用的函数。
1、file.close(): 关闭文件,关闭后文件不能再进行读写。
2、file.flush(): 刷新文件内部缓冲,直接把内部9缓冲区的数据立刻写入文件,而不是被动的等待输出缓冲区写入。
3、file.fileno(): 返回一个整型的文件描述符(file descriptor FD整型),可以用在如os模块的read方法等一些底层操作上。
4、file.isatty(): 如果文件链接到一个终端设备返回True,否则返回False。
5、file.next(): 返回文件下一行。
6、file.read([size]): 从文件读取指定的字节数,如果为给定或为负则读取所有。
7、file.readline([size]):读取整行,包括 "\n" 字符。
8、file.readlines([sizeint]):读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行,实际读取值可能比 sizeint 较大,因为需要填充缓冲区。
9、file.seek(offset[, whence]):设置文件当前位置
10、file.tell():返回文件当前位置。
11、file.truncate([size]):从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
12、file.write(str):将字符串写入文件,返回的是写入的字符长度。
13、file.writelines(sequence):向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

打开文件的三种模式:
1、只读模式(默认)
2、只写模式(不可读,不存在则创建,存在则覆盖)
3、追加模式(可读,不存在则创建,存在则只追加内容)

"+"表示可同时读写某个文件:
1、r+可读写文件(可读,可写,可追加)
2、w+写读
3、a+追加

"U" 表示在读取时,可以将\r \n \r \n自动转换成\n(与r或者r+模式同时使用)
因为Windows系统的转行符为\r\n,linux系统的转行符\n,加上U则能自动把\r\n转换成\n
1、rU
2、r+U

"b"表示处理二进制文件
1.rb
2.wb
3.ab

读取文件:
f = open(r'd:/a.txt', encoding='gbk', mode='r')
print(f1.read())
f.close()

f = open('log1', encoding='gbk', mode='r')
print(f1.read())
f.close()

读取文件流程:
f 文件句柄,file,file_hander,f_h....
open()调用的内置函数,内置函数调用的系统内部的open,
一切对文件进行的操作都是基于文件句柄f.
执行流程:
1,打开文件,产生文件句柄。
2,对文件句柄进行操作。
3,关闭文件句柄。

1 读 r
#1 read() 全读出来
f1 = open('log1', encoding='utf-8')
content = f1.read()
print(content)
f1.close()

2 read(n) 读一部分
f1 = open('log1', encoding='utf-8')
content = f1.read(3)
print(content)
f1.close()

# r 模式 read(n)  这里n按照字符读取。
# rb 模式 read(n)  这里n按照字节读取。
f1 = open('log1', mode='rb')
print(f1.read(3).decode('utf-8'))
f1.close()

3 readline() 按行读取
f1 = open('log1', encoding='utf-8')
print(f1.readline())
print(f1.readline())
print(f1.readline())
f1.close()
4 readlines()
f1 = open('log1', encoding='utf-8')
print(f1.readlines())
f1.close()
5 for 循环
f1 = open('log1', encoding='utf-8')
for line in f1:
    print(line)
f1.close()

6 r+ 读写 先读后写
f1 = open('log1', encoding='utf-8', mode='r+')
f1.write('a')
print(f1.read())
f1.close()

print(f1.read())
f1.write('666')

写:w
# w 没有文件,新建文件写入内容,有原文件,先清空内容,在写入新内容。
f1 = open('log2', encoding='utf-8', mode='w')
f1.write('abcd')
f1.close()

图片的读取及写入
f1 = open('1.jpg', mode='rb')
content = f1.read()

f2 = open('2.jpg', mode='wb')
f2.write(content)
f1.close()
f2.close()

w+ 先写后读
f1 = open('log2', encoding='utf-8', mode='w+')
f1.write('abcd')
f1.seek(0)
print(f1.read())
f1.close()

追加 a
#a 没有文件,新建文件写入内容

f1 = open('log3', encoding='utf-8', mode='a')
# f1.write('abc 666')
f1.write('\nabc 666')
f1.close()

# a+
f1 = open('log3', encoding='utf-8', mode='a+')
f1.write('abc')
f1.seek(0)
print(f1.read())
f1.close()

调整光标位置
f1 = open('log2', encoding='utf-8')
f1.read()
print(f1.tell())
print(f1.seek(0))
print(f1.seek(0,2))
f1.seek(12) # 任意调整
f1.seek(0,2) #光标调整到最后
f1.seek(0) #光标调整到开头
print(f1.tell()) # 告诉光标的位置
f1.close()

按照字节对原文件截取,必须在a 或 a+ 模式
f1 = open('log3', encoding='utf-8', mode='a+')f1.truncate(3)  # 这里的3代表的是字节f1.close()

不用主动关闭文件句柄,
with open('log1', encoding='utf-8') as f1,\
    open('log2', encoding='utf-8', mode='w') as f2:
    content = f1.read()
    f2.write(content)

with open('log1', encoding='utf-8') as f1:
    print(f1.read())
    f1.close()
    pass
    with open('log1', encoding='utf-8',mode='w') as f2:
        f2.write('666')

小练习
文件的改
1、以读模式打开原文件。
2、以写的模式打开一个新文件。
3、将原文件读出按照要求修改将修改后的内容写入新文件。
4、删除原文件。
5、将新文件重命名原文件。
import os
with open('file', encoding='utf-8') as f1,\
    open('file.bak', encoding='utf-8', mode='w') as f2:
    old_content = f1.read()
    new_content = old_content.replace('ab', 'cd')
    f2.write(new_content)
os.remove('file')
os.rename('file.bak', 'file')

 



posted @ 2018-05-30 15:14  xudenghui  阅读(101)  评论(0)    收藏  举报